我是VBA的初学者,并且正在尝试根据单元格值过滤数据,在谷歌搜索后我写了一段有效的代码
Sub FilterDepartment_Sales()
Sheet6.Activate
Sheet6.Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=12, Criteria1:=Sheet8.Range("B3").Value
End Sub
我不得不将此宏分配给对象运行,数据没有得到自动刷新我改变了B3中的单元格值,如何让它自动刷新我更改了B3中的值
同样在上面的代码中,当我尝试执行以下操作时,它给了我一个错误
Sub FilterDepartment_Sales()
Sheet6.Activate
'Sheet6.Cells.Select
'Selection.AutoFilter
'Selection.AutoFilter Field:=12, Criteria1:=Sheet8.Range("B3").Value
Sheet6.Cells.Select.AutoFilter Field:=12, Criteria1:=Sheet8.Range("B3").Value
End Sub
我收到了“找不到对象错误”,无法解释为什么我不能压缩这样的代码
根据答案,我修改了代码
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sheet6.Activate
Sheet6.Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=12, Criteria1:=Sheet8.Range("B3").Value
End Sub
但现在当我更改B3中的值时,没有任何事情发生,我是否需要添加任何内容?
答案 0 :(得分:1)
如果您希望每次更改工作表中的内容时都运行代码,则必须将代码放在一个方法中,该方法处理更改内容的事件。
https://i.stack.imgur.com/sZQqH.png
以下是您必须找到更改事件的地方,在左侧您必须选择@I
,然后从ropdown列表中选择Sheet1
,右侧将包含所有事件。每次更改都会引发更改事件,因此您需要过滤"这个并且仅处理特定单元格更改时的情况:
Worksheet
在示例中,我们仅在单元格Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 2 And Target.Column = 3 Then
Sheet6.Cells.AutoFilter Field:=12, Criteria1:=Sheet8.Range("B3").Value
End If
End Sub
中观察更改。