VBA – END IF运行时错误

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

这里是代码:

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 

如果您想要更完整的debugging信息,请删除或注释On Error Resume Next 。 在Worksheet_Calculate中经常运行的事件macros中不需要这样做。

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

我已经添加了一个广泛的条件,以便代码将只运行,如果父工作表持有ActiveSheet属性 。 工作表可能有挥发性¹公式,由于其他工作表(或甚至另一个工作簿)上的更改而触发计算事件。

LastRow在赋值之后什么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 

¹ 只要整个工作手册中的任何内容发生变化,挥发性函数就会重新计算,而不仅仅是当影响其结果的事情发生变化时。 易失性函数的例子是间接 , 偏移 , 今天 , 现在 , 兰德和兰德维恩 。 CELL和INFO工作表函数的一些子函数也会使它们变得不稳定。

只是为了完成线程。 我根据你写的代码和我的代码的组合来解决它,因为0也应该是取消隐藏的触发器。 我猜错误线导致了这个问题。

  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 Application.EnableEvents = True Application.ScreenUpdating = True End Sub