我有一个电子表格,它链接到另一个工作簿。问题是,当过滤器打开时,它不会随着新数据的添加而改变;您必须重新过滤数据。
我知道有一种方法可以使用宏在数据出现时自动过滤。我已经尝试了 5 个小时来弄清楚宏,但始终无法正确执行。我最接近的方法是设置一个过滤器,然后当新数据出现时,它会删除过滤器并将所有数据加在一起。我需要保留过滤器!
Private Sub Worksheet_Change(ByVal Target As Range)
If Me.FilterMode = True Then
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
With ActiveWorkbook
.CustomViews.Add ViewName:="B2", RowColSettings:=True
Me.AutoFilterMode = False
.CustomViews("B2").Show
.CustomViews("B2").Delete
End With
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End If
End Sub
答案1
本质上,您需要做的就是通过告诉 Excel 在新的数据范围内过滤相同的条件来“刷新”过滤器。
请注意,使用UsedRange
意味着所有数据都位于连续的行和列中。另外,AutoFilter
根据需要调整参数。
由于您的数据是通过公式链接的,因此Worksheet_Change
公式更新时永远不会触发。您需要使用事件Worksheet_Calculate
,但请注意,这将触发每次工作表进行计算,这可能会或可能不会是负担。
我还改变了你的条件If
,IF Me.AutoFilterMode = True
因为FilterMode
如果实际上没有过滤任何内容,即使过滤器已打开,也不会成立。
Private Sub Worksheet_Calculate()
If Me.AutoFilterMode = True Then
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Me.UsedRange.AutoFilter 2, "North" 'filters column B for myFilter value change as needed
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End If
End Sub