使用VBA – 语法错误,通过组合选定的单元格值来筛选表格
你能帮我下面的代码,我不断得到一个语法错误
macros的目标是在同一列下进行多行select过滤。
我得到一个语法错误的线是:
sColumn(n) = sColumn(n) & _ If(sColumn(n) vbNullString, ",", "") & oCell.Text If sColumn(n) vbNullString Then
完整的代码如下:
Sub combinationFilter() Dim oRange As Range Dim oArea As Range Dim oCell As Range Dim oLO As ListObject Dim sColumn() As Variant Dim n As Long ' Create Filter Set oLO = Selection.ListObject If Not oLO Is Nothing Then ReDim sColumn(1 To oLO.ListColumns.Count) Set oRange = Intersect(Selection, oLO.DataBodyRange) For Each oArea In oRange.Areas For Each oCell In oArea.Cells n = oCell.Column - oLO.Range.Column + 1 sColumn(n) = sColumn(n) & _ IIf(sColumn(n) vbNullString, ",", "") & oCell.Text Next oCell Next oArea ' Apply Filter For n = LBound(sColumn) To UBound(sColumn) If sColumn(n) like vbNullString Then oLO.Range.AutoFilter _ Field:=n, _ Criteria1:=Split(sColumn(n), ","), _ Operator:=xlFilterValues End If Next n End If End Sub
我也在下面的行中得到一个不匹配的错误:
If sColumn(n) like vbNullString Then oLO.Range.AutoFilter _ Field:=n, _ Criteria1:=Split(sColumn(n), ","), _ Operator:=xlFilterValues
先谢谢你。
您需要一个IIFfunction ,而不是一个IF。
sColumn(n) = sColumn(n) & _ IIF(CBool(Len(sColumn(n))), ",", vbNullString) & oCell.Text
另外,你的sColumn数组可能是null / vbnullstring /空string。 如果sColumn(n)中存在某些内容,则只需要尝试Range.AutoFilter方法 ,而如果没有。
' Apply Filter For n = LBound(sColumn) To UBound(sColumn) If sColumn(n) <> vbNullString Then oLO.Range.AutoFilter _ Field:=n, _ Criteria1:=Split(sColumn(n), ","), _ Operator:=xlFilterValues End If Next n
你不能将一个空的数组元素(例如vbNullString)分解成任何东西,所以你得到错误13:types不匹配。
与您的情况相关,正确的语法可能如下所示:
sColumn(n) = sColumn(n) & IIf(IsNull(sColumn(n)), "", ",") & oCell.Text
或者,如成员@Jeeped所指出的那样,使用Like
运算符而不是Is
(或使用等号"="
):
sColumn(n) = sColumn(n) & IIf(sColumn(n) Like vbNullString, "", ",") & oCell.Text
希望这可能有帮助。