【发布时间】:2016-11-12 09:09:21
【问题描述】:
我对 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
【问题讨论】:
-
可能不是错误的根源,但您可以将整个
If ... Else ... End If包含为c.EntireRow.Hidden = CBool(c.Value) -
该错误是否比“运行时错误”更能说明任何内容?
-
删除或注释掉
On Error Resume Next并将父工作表引用应用于范围对象。由于其他工作表上的更改,该工作表可能具有触发计算事件的易失公式。 -
LastRow应该做什么? -
如果父工作表不活动,这是否必须运行?另一个工作表中的更改会影响此工作表中的 BA 列吗?
标签: excel error-handling runtime vba