如何合并同一工作表下的两个Worksheet_Change事件过程
Excel VBA 合并两个Worksheet_Change事件解决方案
同一个工作表模块内不允许定义两个相同名称的Worksheet_Change事件,你只需要将两段逻辑整合到同一个事件过程中即可,以下是优化后的合并代码:
Private Sub Worksheet_Change(ByVal Target As Range) ' 仅当修改B8:C8单元格时触发逻辑 If Application.Intersect(Me.Range("$B$8:$C$8"), Target) Is Nothing Then Exit Sub ' 关闭事件触发,避免操作过程中递归调用本事件导致报错 Application.EnableEvents = False Dim selectVal As String ' 统一取B8的值作为判断依据,如需以C8为准可自行修改 selectVal = Me.Range("B8").Value On Error GoTo ErrHandler ' 异常捕获,确保退出前恢复事件触发 ' ---------- 第一部分:控制当前工作表行显隐 ---------- Select Case selectVal Case "1" Me.Range("A35:A42,A50,A55:A57").EntireRow.Hidden = False Me.Rows("12").EntireRow.Hidden = True Case "2" Me.Range("A35:A42,A50,A55:A57").EntireRow.Hidden = True Me.Rows("12").EntireRow.Hidden = False Case "3" Me.Range("A12,A35:A42,A50,A55:A57").EntireRow.Hidden = True End Select ' ---------- 第二部分:控制指定工作表显隐 ---------- Select Case selectVal Case "1" Worksheets("A").Visible = False Worksheets("B").Visible = True Worksheets("C").Visible = False Worksheets("D").Visible = False Worksheets("E").Visible = True Case "2" Worksheets("A").Visible = False Worksheets("B").Visible = False Worksheets("C").Visible = True Worksheets("D").Visible = True Worksheets("E").Visible = False Case "3" Worksheets("A").Visible = True Worksheets("B").Visible = True Worksheets("C").Visible = False Worksheets("D").Visible = False Worksheets("E").Visible = False End Select ErrHandler: ' 无论是否报错,都恢复事件触发 Application.EnableEvents = True End Sub
使用注意事项
- 请将代码放置到对应工作表的VBA模块中(即存在B8:C8下拉框的工作表,从原有代码逻辑判断应为
INPUT工作表) - 优化了触发逻辑:仅当B8/C8的值修改时才会同时执行行显隐和工作表显隐逻辑,避免任意单元格修改都触发无意义的逻辑运行
- 如果B8和C8的下拉值需要保持一致,可以在事件中额外添加同步两个单元格值的逻辑,避免二者值不同导致执行结果异常
内容的提问来源于stack exchange,提问作者EJJ
相关产品推荐
相关产品推荐

