tl;dr:当在 I2 单元格中检测到单元格更改(由另一个脚本引起,而不是用户输入)时,如何强制运行自动筛选脚本?(注意:Excel 365,我没有看到该标签的特定标签,但如果我错过了,请随意调整!)
我已将单元格链接到不同的选项卡上,只要其他选项卡上的单元格的值发生变化,这些单元格的值也会随之变化。如果您在一个选项卡上设置 5,它将把其他选项卡上的其他单元格的值更改为相同的值。这是来自 tab1 的示例(其他选项卡目前在内容和布局上完全相同,但此脚本的版本已进行本地调整):
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("F2").Address Then
Range("A5:E120").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("F1:F2")
End If
If Not Intersect(Target, Range("I2")) Is Nothing Then
If Target = Range("I2") Then
If Sheets("tab2").Range("I2").Value <> Target.Value Then
Sheets("tab2").Range("I2").Value = Target.Value
End If
End If
End If
If Not Intersect(Target, Range("I2")) Is Nothing Then
If Target = Range("I2") Then
If Sheets("tab3").Range("I2").Value <> Target.Value Then
Sheets("tab3").Range("I2").Value = Target.Value
End If
End If
End If
End Sub
我尝试根据此值过滤这两个选项卡上的行:如果设置为 5,则应显示 A 列中包含 5 或更小值(或 3 或更小值、2 或更小值等)的所有行。我为此创建了一个辅助列,用于检查 I2 中的值并比较 A 列值:
=IF(A5<=$I$2,"yes","no")
这个想法是,任何带有“是”的东西都会显示出来,而任何带有“否”的东西都会被隐藏起来。
目前我在每个选项卡上手动使用自动筛选,但我想自动更改筛选条件。虽然我使用内置公式将复杂的电子表格组合在一起方面相当熟练,但使用 vba 我还很陌生。
这看起来很有希望(上面也有介绍): https: //www.tutorialspoint.com/how-to-autofilter-rows-based-on-cell-values-in-excel,它似乎没有使用完整的自动筛选下拉菜单,但仍然有效:
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated By Nirmal
If Target.Address = Range("F2").Address Then
Range("A5:E120").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("F1:F2")
End If
End Sub
这将获取 E2 的值并隐藏标题与 E1 匹配的列中值的行。自动筛选下拉菜单不可用,但这没问题,因为筛选才是最重要的部分。
我遇到的问题是,这个脚本似乎无法识别链接单元格的更改,只能识别直接用户输入的更改。因此,您必须再次对每个选项卡进行编辑,这正是我想要避免的(即在一个地方更改值,让过滤器在所有地方都更改)...