使用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 

希望这可能有帮助。