You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并同一工作表下的两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:45:03