当列更改时运行的 VBA 代码

当列更改时运行的 VBA 代码

我已经设法编写了一些代码,以便在单独的工作表中对大约 20 个表应用自动筛选。下面的代码正在我的主要数据表的模块中运行。目前,当我的数据表中的任何单元格发生变化时,代码就会运行。我想修改下面的代码,以便只有当特定列中的数据发生变化时它才会运行。例如 A、G 和 M 列

任何有关此问题的帮助都将不胜感激

 Private Sub Worksheet_Change(ByVal Target As Range)
'this part runs the autofilter on my active sheet
    ActiveSheet.AutoFilter.ApplyFilter
'this part runs all the table autofilters in the sheet "template"
    Dim oList As ListObject
    For Each oList In ActiveWorkbook.Worksheets("TEMPLATE").ListObjects
      oList.AutoFilter.ApplyFilter
   Next oList
End Sub

答案1

我想修改下面的代码,以便只有当特定列中的数据发生变化时它才会运行。...例如 A、G 和 M 列

你不能。你必须检查改变的范围是否与感兴趣的范围重叠,并且只有当情况属实时才执行操作:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A,G:G,M:M")) Is Nothing Then
    'this part runs the autofilter on my active sheet
        ActiveSheet.AutoFilter.ApplyFilter
    'this part runs all the table autofilters in the sheet "template"
        Dim oList As ListObject
        For Each oList In ActiveWorkbook.Worksheets("TEMPLATE").ListObjects
            oList.AutoFilter.ApplyFilter
        Next oList
Else
    ' perform an action if the columns in interest are not altered (if needed)
    ' if not needed then Else section can be removed
End If
End Sub

当然,您可以使用任何所需的Range数据类型表达式(范围、列、行、单元格等)来代替Range("A:A,G:G,M:M")

相关内容