【发布时间】:2021-12-14 20:19:35
【问题描述】:
我有一个 Excel 工作簿,其中用户从工作表“报告生成器”的单元格 C4:C7 的下拉列表中输入最多四个关键字,然后我的 VBA 代码采用这些关键字,在另一个名为“数据”,复制过滤的行并将它们作为报告粘贴到 Word 文件中。该代码最多同时适用于两个关键字,但由于某种原因,当有三个或四个关键字时会失败,我不明白为什么。具体来说,当具有三个或四个关键字时,过滤返回 0 行,因此没有任何内容可复制。如果我尝试在 Excel 中手动操作,这不是问题,因此不是数据问题。
以下是执行过滤的代码部分。如您所见,if循环从最后一个开始依次检查每个关键字是否为空,并将填充的关键字应用于过滤。循环每次都成功完成,但由于某种原因,在 3 或 4 个关键字的情况下过滤命令返回 0 行。你能帮我理解为什么会这样吗?谢谢!
'Filter data based on keywords selected
Sheets("Data").Select
'If user inputs 1 keyword
If IsEmpty(Sheets("Report generator").Range("C7")) = True And IsEmpty(Sheets("Report generator").Range("C6")) = True And IsEmpty(Sheets("Report generator").Range("C5")) = True Then
ActiveSheet.Range("$A$1:$F$1").AutoFilter Field:=5, Criteria1:= _
Array("*" & Sheets("Report generator").Range("C4").Value & "*"), _
Operator:=xlFilterValues
'If user inputs 2 keywords
ElseIf IsEmpty(Sheets("Report generator").Range("C7")) = True And IsEmpty(Sheets("Report generator").Range("C6")) = True Then
ActiveSheet.Range("$A$1:$F$1").AutoFilter Field:=5, Criteria1:= _
Array("*" & Sheets("Report generator").Range("C4").Value & "*", _
"*" & Sheets("Report generator").Range("C5").Value & "*"), _
Operator:=xlFilterValues
'If user inputs 3 keywords
ElseIf IsEmpty(Sheets("Report generator").Range("C7")) = True Then
ActiveSheet.Range("$A$1:$F$1").AutoFilter Field:=5, Criteria1:= _
Array("*" & Sheets("Report generator").Range("C4").Value & "*", _
"*" & Sheets("Report generator").Range("C5").Value & "*", _
"*" & Sheets("Report generator").Range("C6").Value & "*"), _
Operator:=xlFilterValues
'If user inputs 4 keywords
ElseIf IsEmpty(Sheets("Report generator").Range("C7")) = False And IsEmpty(Sheets("Report generator").Range("C6")) = False And IsEmpty(Sheets("Report generator").Range("C5")) = False And IsEmpty(Sheets("Report generator").Range("C4")) = False Then
ActiveSheet.Range("$A$1:$F$1").AutoFilter Field:=5, Criteria1:= _
Array("*" & Sheets("Report generator").Range("C4").Value & "*", _
"*" & Sheets("Report generator").Range("C5").Value & "*", _
"*" & Sheets("Report generator").Range("C6").Value & "*", _
"*" & Sheets("Report generator").Range("C7").Value & "*"), _
Operator:=xlFilterValues
End If
【问题讨论】:
-
IsEmpty() 函数后不需要 = True。
-
Criteria1数组中的通配符元素不能超过 2 个。