excel - VBA - END IF 的运行时错误

标签 excel error-handling runtime vba

我对 VBA 比较陌生。当我在工作表上工作时,我创建了一个代码,它根据列行中的条件自动隐藏/取消隐藏行(0 取消隐藏/1 隐藏)。这个相对简单的宏运行良好,直到我添加了不同的工作表。由于此表中没有宏,我认为它不相关。但是现在每次它都会在 END IF 函数上出现运行时错误,我不知道如何解决它。可能有一个简单的解决方案,但我找不到。

这是代码:

    Private Sub Worksheet_Calculate()
    Application.ScreenUpdating = False
    Dim LastRow As Long, c As Range
    Application.EnableEvents = False
    LastRow = Cells(Cells.Rows.Count, "BA").End(xlUp).Row
        On Error Resume Next
        For Each c In Range("BA34:BA56,BA73:BA74,BA76:BA107")
        If c.Value = 1 Then
            c.EntireRow.Hidden = True
        ElseIf c.Value = 0 Then
            c.EntireRow.Hidden = False
    End If
    Next
    On Error GoTo 0
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    End Sub

最佳答案

删除或注释掉 On Error Resume Next如果您想要更完整的调试信息。在像 Worksheet_Calculate 一样频繁运行的事件宏中应该不需要它。

将父工作表引用应用于范围对象。由于其他工作表上的更改,工作表可能具有触发计算事件的易失公式。

我添加了一个广泛的条件,以便代码只有在父工作表包含 ActiveSheet property 时才会运行.由于另一个工作表(甚至另一个工作簿)的更改,工作表可能具有触发计算事件的 volatile ¹公式。
LastRow分配后什么都不做(这是有问题的)所以我删除了它。

我简化了 Range.Hidden属性到单行。

Private Sub Worksheet_Calculate()
    If Me.Name = Activesheet.Name Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Dim c As Range
        For Each c In Me.Range("BA34:BA56,BA73:BA74,BA76:BA107")
            c.EntireRow.Hidden = CBool(c.Value2)
        Next c
        Application.EnableEvents = True
        Application.ScreenUpdating = True
    End If
End Sub

¹ 可变函数会在整个工作簿中的任何内容发生变化时重新计算,而不仅仅是在影响其结果的内容发生变化时重新计算。 的示例 volatile 函数是 INDIRECT , OFFSET , TODAY , NOW , RANDRANDBETWEEN . CELL的一些子功能和 INFO工作表函数也会使它们不稳定。

关于excel - VBA - END IF 的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38289677/

相关文章:

excel - 用户窗体以看似相反的顺序循环

vba - 在 Excel 脚本中用点替换逗号

Python - 如何阅读 Sharepoint excel 工作表特定工作表

runtime - jshell 中 J 和 R 标志的确切含义/目的是什么?

python - 如何在打印输出中传递RuntimeWarning?

Excel:如果在另一列中发现重复的单元格值,则突出显示绿色

python-3.x - 如何有效地将生成器对象的数值与float的数值进行比较而不会出错?

scala - 处理基本阵列错误的最佳方法

python - 如何在python的离散化方法中解决索引出界

python - 如何在运行时判断您是否在 Python 的单元测试中?