VBA过滤器基于另一个单元格

时间:2017-07-31 15:19:49

标签: excel vba excel-vba

我是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中的值时,没有任何事情发生,我是否需要添加任何内容?

1 个答案:

答案 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 中观察更改。