我正在尝试在各种Excel列上编写过滤选项。我试图通过输入框和If / Then-sequence像bellow一样,但由于某种原因它会贯穿到最后的Else语句"不存在"。它似乎没有认出我的意见。
Sub MultipleColumnsFilter()
Range("N:N,U:U").ClearContents
Application.ScreenUpdating = False
Dim myValue1 As String
Dim myValue2 As String
myValue1 = InputBox("Enter desired Column")
myValue2 = InputBox("Enter Keyword in selected column")
If myValue1 = c Then
With Worksheets("pump").Range("C:C")
.AutoFilter
'** Use temporary column 1
.AutoFilter Field:=1, Criteria1:=myValue2
End With
Application.ScreenUpdating = True
ElseIf myValue1 = d Then
With Worksheets("pump").Range("D:D")
.AutoFilter
'** Use temporary column 1
.AutoFilter Field:=1, Criteria1:=myValue2
End With
Application.ScreenUpdating = True
ElseIf myValue1 = E Then
With Worksheets("pump").Range("E:E")
.AutoFilter
'** Use temporary column 1
.AutoFilter Field:=1, Criteria1:=myValue2
End With
Application.ScreenUpdating = True
ElseIf myValue1 = I Then
With Worksheets("pump").Range("I:I")
.AutoFilter
'** Use temporary column 1
.AutoFilter Field:=1, Criteria1:=myValue2
End With
Application.ScreenUpdating = True
Else
MsgBox (" does not exist ")
End If
当然,放弃If-else结构并使用某种Range函数(包括所需过滤区域的多列)会更好,但是当我尝试它时,它也没有工作。 有线索吗?
编辑:此外我想扩展功能并使用相同的结构来过滤OUT项,具体取决于一些键(myValue2)。 这怎么可行?我按如下方式更改了过滤部分
.AutoFilter Field:=1, Criteria1:="<>myValue2"
但这似乎不起作用,它只是在没有错误的情况下运行脚本,但对单元格没有任何影响。 有什么想法吗?
答案 0 :(得分:1)
不确定这是唯一的问题,但
If myValue1 = c Then
c被认为是未声明的变量,因此c =“”,所以这一行实际上意味着:
If myValue1 = "" Then
这也适用于你所有的elseif语句。
只需使用引号:
If myValue1 = "c" Then
请记住,默认情况下,VBA在字符串比较中区分大小写。所以你要么必须添加:
Option Compare Text
位于您的模块顶部,位于您的第一个Sub之上,或者您可以使用以下格式:
If UCase(myValue1) = "C" Then
答案 1 :(得分:1)
以下是针对未知文本字符串过滤未知列的更通用的解决方案。
Dim myValue1 As String, myValue2 As String, myColumn As Long
myValue1 = InputBox("Enter desired Column")
myValue2 = InputBox("Enter Keyword in selected column")
If IsNumeric(myValue1) Then
myColumn = Range("R1C" & myValue1).Column
Else
myColumn = Range(myValue1 & 1).Column
End If
With Worksheets("pump")
If .AutoFilterMode Then .AutoFilterMode = False
With .Columns(myColumn)
.AutoFilter Field:=1, Criteria1:=myValue2
End With
End With
Application.ScreenUpdating = True
用户可以输入数字列索引或列字母标签,代码将确定要过滤的正确列。