2016-04-17 3 views
2

あなたは以下のコードで私を助けてください、私はマクロの目的は、複数行の選択によってフィルタである構文エラーにフィルタ - 構文エラー

を得続けます同じ列の下で

私はあるに構文エラーを取得しています行:

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 

ありがとうございます。

+0

適切な構文インデントでコードを読みやすくするために編集できますか? – Jeeped

+0

@SamGilbert - 私は '<>'( '='ではなく)がマークダウンによって飲み込まれたと思う。 – Jeeped

答えて

1

IFではなくIIF functionが必要です。

sColumn(n) = sColumn(n) & _ 
    IIF(CBool(Len(sColumn(n))), ",", vbNullString) & oCell.Text 

さらに、sColumn配列はnull/vbnullstring /空文字列になることがあります。 sColumn(n)に何かがある場合にのみ、Range.AutoFilter Methodを試してみます。

' 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:タイプの不一致を取得することはできません。

+0

上記のおかげで。 oLO.Range.AutoFilter _ フィールド:= n、_ Criteria1:= Split(sColumn(n)、 "、")、_ 演算子:= xlFilterValues – James

+0

残りのコードは次のとおりです。あなたの質問は間違っています。 'sColumns(n)<> vbNullString Then'を使用していますか?それを伝えることは不可能です。 – Jeeped

+0

お詫びthats "=" ... sColumns(n)= vbNullStringの場合 – James

2

あなたのケースに関連する、正しい構文は次のようになり得る:

Like演算子の代わりに、 Is(または等号 "="を使用)を使用して、部材@Jeepedによって指摘されるよう
sColumn(n) = sColumn(n) & IIf(IsNull(sColumn(n)), "", ",") & oCell.Text 

または、:

sColumn(n) = sColumn(n) & IIf(sColumn(n) Like vbNullString, "", ",") & oCell.Text 

これが役に立ちます。

+0

私はそれを調べようとしています。私はまだ同じエラーが発生しています – James

+0

私の拡張答えを参照してください。宜しくお願いします、 –