我正在尝试创建一个VBA,该VBA根据表单中的下拉列表为我提供自动值。问题是,当我运行宏时,它会导致错误并且excel停止工作。在这种情况下,我们非常欢迎您提供任何帮助。
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("$G$11") = "UD Sheet" Then
Rows("20:25").EntireRow.Hidden = False
Else
Rows("21:25").EntireRow.Hidden = True
End If
If Range("G12").Value = "Flex Tape" Then
Range("B20").Value = "None"
Else
Range("B20").Value = ""
End If
exitHandler:
Application.EnableEvents = True
Exit Sub
End Sub
因此,在您的代码中首先要做的是,不需要在结束子之前放置一个退出子。该代码将在该行之后结束,因此这是多余的。
接下来您需要了解的是,如果您未明确禁用更改事件,则更改事件将继续触发。因此,这意味着当您在该工作表上隐藏一行时,由于工作表上发生了更改,因此更改事件将继续触发。
接下来需要牢记的是跟踪更改发生的位置并启动程序。目标是一个范围对象,它将返回在图纸上发生特定更改的范围。
因此,要执行此操作,需要验证是否需要使用InterSect函数基于目标触发例程。
整个代码如下:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("G11")) Is Nothing Then
If Range("$G$11") = "UD Sheet" Then
Rows("20:25").EntireRow.Hidden = False
Else
Rows("21:25").EntireRow.Hidden = True
End If
End If
If Not Intersect(Target, Range("G12")) Is Nothing Then
If Range("G12").Value = "Flex Tape" Then
Range("B20").Value = "None"
Else
Range("B20").Value = ""
End If
End If
Application.EnableEvents = True
End Sub