VBA:计算filter中select不同项目的数量

在Excel中,我在标题上有一个filter,这个filter允许用户select不同的区域,并显示与所选区域相匹配的logging。 我有下面的代码,然后显示在筛选器中select的值:

Dim ftrRegion As Filter On Error GoTo stopError Set ftrArea = ActiveSheet.AutoFilter.Filters(2) Set ftrRegion = ActiveSheet.AutoFilter.Filters(1) If ftrRegion.On Then Application.EnableEvents = False Debug.Print ftrRegion.Criteria1 Range("E206").Value = Mid$(ftrRegion.Criteria1, 2) Range("F201").Value = "Region" & " " & Mid$(ftrRegion.Criteria1, 2) Else Range("E206").Value = "" End If 

但问题是,如果用户select多个值,整个事情不起作用,所以我想要的是一种方法来计算用户在filter中select的值的数量,如果它只是1然后通过一个if语句应用这个代码。 有人可以请帮忙。

更改

 If ftrRegion.On Then 

 If ftrRegion.On And ftrRegion.Count = 1 Then 

我没有用最新版本的Officetesting过,但是它可能有助于:

 Function GetFilterSettings(oFilter As Filter) As String Dim sTemp As String With oFilter If .On Then If IsArray(.Criteria1) Then sTemp = Join(.Criteria1, ", ") Else Select Case .Operator Case xlAnd sTemp = .Criteria1 If Len(.Criteria2) > 0 Then _ sTemp = sTemp & " and " & .Criteria2 Case xlBottom10Percent sTemp = "Bottom n% - effectively" & .Criteria1 Case xlTop10Items sTemp = "Top n items - effectively " & .Criteria1 Case xlBottom10Items sTemp = "Bottom n items - effectively " & .Criteria1 Case xlOr sTemp = .Criteria1 If Len(.Criteria2) > 0 Then _ sTemp = sTemp & " or " & .Criteria2 Case xlTop10Percent sTemp = "Top n% - effectively " & .Criteria1 End Select End If Else sTemp = "Off" End If End With GetFilterSettings = sTemp End Function 

因此,在一个普通模块中 ,你的代码将变成:

 Dim ftrRegion As Filter On Error GoTo stopError Set ftrArea = ActiveSheet.AutoFilter.Filters(2) Set ftrRegion = ActiveSheet.AutoFilter.Filters(1) Application.EnableEvents = False Range("E206").Value = GetFilterSettings(ftrArea) Range("F201").Value = "Region " & GetFilterSettings(ftrRegion)