我对 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 , RAND和 RANDBETWEEN . CELL的一些子功能和 INFO工作表函数也会使它们不稳定。
关于excel - VBA - END IF 的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38289677/