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
您的颜色数据是从A2到A5的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
端接头
之前:
及之后:
可能存在的副本