VBA通过关键字在较宽的列范围内进行自定义过滤

我正在尝试在各种各样的Excel列上编程筛选选项。 我试图通过Inputboxes和If / Then-sequence来做到这一点,但由于某种原因,它贯穿到最终的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函数(包括需要的过滤区域的多个列),但是当我尝试它时,它也不起作用。 任何线索?

编辑:此外,我想展开function,并使用相同的结构过滤项目OUT,取决于一些keyords(myValue2)。 这怎么能工作? 我改变了过滤部分如下

  .AutoFilter Field:=1, Criteria1:="<>myValue2" 

但是这似乎并没有工作,它只是通过脚本运行没有错误,但也没有任何影响的单元格。 有任何想法吗 ?

不知道这是唯一的问题,但

 If myValue1 = c Then 

c被认为是一个未声明的variables,因此c =“”,所以这条线其实意味着:

 If myValue1 = "" Then 

这也适用于你所有的elseif语句。

只需使用引号:

 If myValue1 = "c" Then 

请记住,默认情况下,VBA在string比较中区分大小写。 所以你要么添加:

 Option Compare Text 

在你的模块的顶部,在你的第一个Sub上面,或者你可以使用这种格式:

 If UCase(myValue1) = "C" Then 

这是一个更通用的解决scheme来过滤未知文本string的未知列。

 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 

用户可以input数字列索引或列字母标签,代码将确定要过滤的正确列。