VBA代码,用于从筛选器或交换中取消选择要解决的特定项

VBA代码,用于从筛选器或交换中取消选择要解决的特定项,vba,excel,Vba,Excel,我有一个名为“颜色”的列,它经过过滤,因此我可以选择\取消选择所需的颜色 我录制了一个宏,以了解如何过滤列中除蓝色、绿色和橙色之外的所有颜色 唯一剩下的颜色是红色 创建的宏如下所示: ActiveSheet.Range("$A$1:$B$5").AutoFilter Field:=1, Criteria1:="Red" 这段代码的问题是它不适用于一般情况,因为它包括“红色”并排除其他所有内容,而我需要排除蓝色、绿色和橙色,并包括其他所有内容 我需要不同代码的原因是,我的颜色选择可以根据我从数据

我有一个名为“颜色”的列,它经过过滤,因此我可以选择\取消选择所需的颜色

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

唯一剩下的颜色是红色

创建的宏如下所示:

ActiveSheet.Range("$A$1:$B$5").AutoFilter Field:=1, Criteria1:="Red"
这段代码的问题是它不适用于一般情况,因为它包括“红色”并排除其他所有内容,而我需要排除蓝色、绿色和橙色,并包括其他所有内容

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

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

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

像这样,您可以传递一个值数组作为筛选条件。您可以在需要添加更多颜色时扩展阵列。这是一种选择,而不是取消选择,好像您想排除某些颜色,只是不将它们添加到列表中。这确实取决于你有所有可能的颜色覆盖虽然。我相信过滤只会扩展到两个值

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

您的颜色数据是从A2A5的4个单元格。我们构造了一个包含这些值的数组,但忽略了蓝色、绿色和橙色

然后,我们应用数组作为筛选条件:

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
Sub-Framm()
尺寸c作为集合,i作为长度,v作为字符串,arr
集合c=新集合
对于i=2到5
v=单元(i,1)
如果v为绿色,v为蓝色,v为橙色,则
出错时继续下一步
c、 加五,集体安全技术审查(五)
错误转到0
如果结束
接下来我
ReDim arr(1到c计数)
对于i=1到c,计数
arr(i)=c.第(i)项
接下来我
ActiveSheet.Range(“$A$1:$B$5”)。自动筛选字段:=1,标准1:=(arr),运算符:=xlFilterValues
端接头
之前:

及之后:

可能存在的副本