【问题标题】:VBA: Retrieve data from a filter and store it in a variableVBA:从过滤器中检索数据并将其存储在变量中
【发布时间】:2015-06-24 08:57:57
【问题描述】:

我在列标题“区域”上有一个过滤器,当应用该过滤器时,它仅显示该区域与应用的过滤器匹配的记录,例如5.

是否有一段代码将过滤器中的值存储在变量中?

过滤器使用的代码是:

ActiveSheet.Range("$A$3:$BN$197").AutoFilter Field:=2, Criteria1:=

所以我想要的是这样的:

dim Filter As String
Filter = ActiveSheet.Range("$A$3:$BN$197").AutoFilter Field:=2, Criteria1:=

但问题是因为它是一个过滤器,过滤区域可能会改变,即一个用户可能在区域 5 上过滤,而另一个用户在区域 4 上过滤。

【问题讨论】:

    标签: vba excel variables filter


    【解决方案1】:

    基本上你想要这样的东西:

    Dim ftr                   As Filter
    Dim sCriterion            As String
    Set ftr = ActiveSheet.AutoFilter.Filters(2)
    If ftr.On Then sCriterion = Mid$(ftr.Criteria1, 2)
    

    只要您知道他们只会过滤一个值。否则,您需要检查Operator,然后确定使用哪种过滤器。

    对于自动事件代码,您可以使用:

    Private Sub Worksheet_Calculate()
    Dim ftr                   As Filter
    On Error Goto hell
    Set ftr = ActiveSheet.AutoFilter.Filters(2)
    If ftr.On Then
       application.enableevents = False
       debug.print ftr.criteria1
       Range("E205").value = Mid$(ftr.Criteria1, 2)
    End If
    
    hell:
       application.enableevents = true
    End Sub
    

    右键单击工作表选项卡,选择查看代码,然后将其粘贴进去。

    【讨论】:

    • 谢谢!这行得通,我得到它,以便它在单元格中显示值,所以在你的代码下面我添加了以下内容:Range("E205").SelectActiveCell.Value = sCriterion 但这只有在我运行宏时才有效,有没有办法让代码在应用过滤器时自动运行?
    • 如果您有任何小计公式,您可以使用Worksheet_Calculate 事件来更新过滤条件。
    • 我没有任何小计公式,但你能告诉我如何使用Wordsheet_Calculate 在应用过滤器时自动运行宏吗?
    • 好的,所以为了确保我做的正确,我创建了一个新模块,然后将代码:Private Sub Worksheet_Calculate() Dim ftr As Filter Set ftr = ActiveSheet.AutoFilter.Filters(2) If ftr.On Then Range("E205").value = Mid$(ftr.Criteria1, 2) End Sub 插入到模块中,然后当我应用过滤器时,值将是显示在 E205 中?这是正确的吗?
    • 否 - 它进入工作表代码模块 - 请参阅答案的最后一行。
    猜你喜欢
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多