【问题标题】:Combining multiple Worksheet_Change macros组合多个 Worksheet_Change 宏
【发布时间】:2015-09-09 12:55:59
【问题描述】:

我正在尝试组合多个 worksheet_change 宏(请参见下面的代码)。我的目标是,每当更改“目标”范围(合并的下拉列表单元格)时,下面的范围(再次合并单元格)就会清除。当多个不同的单元格被更改时,我需要这样做,因此多个工作表更改代码。

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("J1:O1")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
        Range("J2:O3").ClearContents
        Range("D15:E15").ClearContents
            Range("B16:E16").ClearContents
                Range("B17:E19").ClearContents
        Range("D20:E20").ClearContents
            Range("B21:E21").ClearContents
                Range("B22:E24").ClearContents
        Range("D25:E25").ClearContents
            Range("B26:E26").ClearContents
                 Range("B27:E29").ClearContents
        Range("D30:E30").ClearContents
            Range("B31:E31").ClearContents
                 Range("B32:E34").ClearContents
        Range("B3:H14").ClearContents
    Application.EnableEvents = True
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("J2:K2")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
        Range("J3:K3").ClearContents
    Application.EnableEvents = True
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("L2:M2")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
        Range("L3:M3").ClearContents
    Application.EnableEvents = True
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("N2:O2")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
        Range("N3:O3").ClearContents
    Application.EnableEvents = True
    End Sub

【问题讨论】:

  • 您在一个工作表模块中拥有所有这些子项吗?

标签: vba excel


【解决方案1】:

下面的代码只是将您的代码放在 1 个Sub 和多个If statements 中。唯一的变化是If 现在是If Not,如果有IntersectExit sub,它将处理代码。

下面的代码可以解决问题:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("J1:O1")) Is Nothing Then
        Application.EnableEvents = False
        Range("J2:O3").ClearContents
        Range("D15:E15").ClearContents
        Range("B16:E16").ClearContents
        Range("B17:E19").ClearContents
        Range("D20:E20").ClearContents
        Range("B21:E21").ClearContents
        Range("B22:E24").ClearContents
        Range("D25:E25").ClearContents
        Range("B26:E26").ClearContents
        Range("B27:E29").ClearContents
        Range("D30:E30").ClearContents
        Range("B31:E31").ClearContents
        Range("B32:E34").ClearContents
        Range("B3:H14").ClearContents
        Application.EnableEvents = True
        Exit Sub
    End If
    If Not Intersect(Target, Range("J2:K2")) Is Nothing Then
        Application.EnableEvents = False
        Range("J3:K3").ClearContents
        Application.EnableEvents = True
        Exit Sub
    End If
    If Not Intersect(Target, Range("L2:M2")) Is Nothing Then
        Application.EnableEvents = False
        Range("L3:M3").ClearContents
        Application.EnableEvents = True
        Exit Sub
    End If
    If Not Intersect(Target, Range("N2:O2")) Is Nothing Then
        Application.EnableEvents = False
        Range("N3:O3").ClearContents
        Application.EnableEvents = True
        Exit Sub
    End If
End Sub

【讨论】:

    【解决方案2】:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("J1:O1")) Is Nothing Then
        Application.EnableEvents = False
            Range("J2:O3").ClearContents
            Range("D15:E15").ClearContents
                Range("B16:E16").ClearContents
                    Range("B17:E19").ClearContents
            Range("D20:E20").ClearContents
                Range("B21:E21").ClearContents
                    Range("B22:E24").ClearContents
            Range("D25:E25").ClearContents
                Range("B26:E26").ClearContents
                     Range("B27:E29").ClearContents
            Range("D30:E30").ClearContents
                Range("B31:E31").ClearContents
                     Range("B32:E34").ClearContents
            Range("B3:H14").ClearContents
        Application.EnableEvents = True
    End If
    
    If Not Intersect(Target, Range("J2:K2")) Is Nothing Then
        Application.EnableEvents = False
            Range("J3:K3").ClearContents
        Application.EnableEvents = True
    End If
    
    If Not Intersect(Target, Range("L2:M2")) Is Nothing Then
        Application.EnableEvents = False
            Range("L3:M3").ClearContents
        Application.EnableEvents = True
    End If
    
    If Not Intersect(Target, Range("N2:O2")) Is Nothing Then
        Application.EnableEvents = False
            Range("N3:O3").ClearContents
        Application.EnableEvents = True
    End If
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 2012-06-29
      • 2013-04-11
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2018-03-16
      相关资源
      最近更新 更多