我已经设法编写了一些代码,以便在单独的工作表中对大约 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")
。