2015-06-24 64 views
0

我在列标题“区域”上有一个过滤器,它在应用时只显示区域与应用过滤器相匹配的记录,例如, 5.VBA:从过滤器中检索数据并将其存储在变量中

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

的过滤器使用的代码是:

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上另一个用户。

回答

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 

右键单击工作表标签,选择查看代码,然后粘贴在

+0

谢谢!这有效,我得到它,然后它显示在单元格中的值,所以在你的代码下面我添加了以下内容:'Range(“E205”)。Select' 'ActiveCell.Value = sCriterion'但是这会只有当我运行宏时有效,有没有办法让代码在应用过滤器时自动运行? –

+0

如果您有任何小计公式,您可以使用'Worksheet_Calculate'事件更新筛选条件。 – Rory

+0

我没有任何小计公式,但可以告诉我如何使用'Wordheet_Calculate'在应用过滤器时自动运行宏? –

相关问题