excel VBA – 从Autofilter返回Criteria1数组

我有一个表,我需要返回所有的切换值。 当我select哪一个我想要它后,我logging一个macros它看起来像这样

ActiveSheet.Range("$A$1:$P$1000").AutoFilter Field:=6, Criteria1:=Array("A" _ , "B", "C", "D", "E", "G"), Operator:=xlFilterValues 

我的问题是,将被用户过滤的a,b,c等值将始终在改变,所以我不能以任何方式对任何标准进行硬编码。

有没有办法我可以返回一个类似于这个样子的方式来切换的数组?

 msgbox ActiveSheet.Range("$A$1:$P$1000").criteria1 

从数据开始,如:

在这里输入图像说明

这个子应用了一个filter:

 Sub Macro1() Range("A1:C22").Select Selection.AutoFilter ActiveSheet.Range("$A$1:$C$22").AutoFilter Field:=3, Criteria1:=Array( _ "Alice", "Boris", "Mike"), Operator:=xlFilterValues End Sub 

在这里输入图像说明

这个子将会:

  • 确定哪些列被过滤
  • 过滤的列,它们有select
  • 列出实际的select

 Sub FilterInformation() Dim st As String, ws As Worksheet, rg As Range, boo As Boolean Set ws = ActiveSheet On Error GoTo GetMeOut Set rg = ws.AutoFilter.Range MsgBox "Filter range" & vbCrLf & rg.Address N = ws.AutoFilter.Filters.Count MsgBox "Number of filters" & vbCrLf & N For i = 1 To N boo = ws.AutoFilter.Filters.Item(i).On MsgBox i & "==>" & boo If boo Then MsgBox UBound(ws.AutoFilter.Filters.Item(i).Criteria1) & " items in array" U = UBound(ws.AutoFilter.Filters.Item(i).Criteria1) L = LBound(ws.AutoFilter.Filters.Item(i).Criteria1) For j = L To U MsgBox ws.AutoFilter.Filters.Item(i).Criteria1(j) Next End If Next Exit Sub GetMeOut: MsgBox ("no filters in sheet") End Sub