1

我有一个名为 Color 的列,它被过滤了,所以我可以选择\取消选择所需的颜色。

我录制了一个宏来了解如何过滤除蓝色、绿色和橙色之外的所有颜色的列。

唯一剩下的颜色是红色。

创建的宏如下:

ActiveSheet.Range("$A$1:$B$5").AutoFilter Field:=1, Criteria1:="Red"

这段代码的问题是它不适用于一般情况,因为它包含“红色”并排除其他所有内容,而我需要排除蓝色、绿色和橙色,并包含其他所有内容。

我需要不同代码的原因是我的颜色选择可以根据我从数据库中获得的内容而改变。

例如,如果我自动提取数据并创建过滤器,我的列表中可能会出现粉红色,但我的代码会被破坏,因为不会选择粉红色,只会选择红色。

有关解决此问题的任何提示?一个想法是选择所有未选择的内容,并取消选择所有已选择的内容(如果有任何 vba 代码可以执行此操作)。使用此策略,我将选择蓝色、绿色和橙色,然后运行交换代码。

4

2 回答 2

2

像这样,您可以在其中传递一组值作为过滤条件。当您想添加更多颜色时,您可以扩展数组。这是选择而不是取消选择,就好像您想排除某些颜色只是不将它们添加到列表中一样。不过,这确实取决于您是否覆盖了所有可能的颜色。过滤掉只延伸到我认为的两个值。

Option Explicit

Public Sub test()
    Dim arr()
    arr = Array("Red", "Pink")

    ActiveSheet.Range("$A$1:$B$5").AutoFilter
    ActiveSheet.Range("$A$1:$B$5").AutoFilter Field:=1, Criteria1:=arr, _
                      Operator:=xlFilterValues
End Sub
于 2018-05-03T18:14:07.597 回答
0

您的颜色数据是从A2A5的 4 个单元格。我们构造了一个包含这些值的数组,但省略了BlueGreenOrange

然后我们将数组应用为过滤条件:

Sub Framm()
    Dim c As Collection, i As Long, v As String, arr
    Set c = New Collection

    For i = 2 To 5
        v = Cells(i, 1)
        If v <> "Green" And v <> "Blue" And v <> "Orange" Then
            On Error Resume Next
                c.Add v, CStr(v)
            On Error GoTo 0
        End If
    Next i

    ReDim arr(1 To c.Count)
    For i = 1 To c.Count
        arr(i) = c.Item(i)
     Next i

ActiveSheet.Range("$A$1:$B$5").AutoFilter Field:=1, Criteria1:=(arr), Operator:=xlFilterValues

End Sub

前:

在此处输入图像描述

之后:

在此处输入图像描述

于 2018-05-03T19:20:02.687 回答