この手順の最終目標は、 "TestData"テーブル内の "SysAccts"テーブルにリストされているユーザーを持つすべての行を削除することです「リスト」ワークシート)。Excel VBA - autofilterの条件として配列を使用します。期待される結果ではありません。
私はそれらを選択して削除できるように、それらの行を見つけるためにオートフィルターを使用しています。
これは私のコードです:
Sub ClearSystemAccts()
Dim wksData As Worksheet
Dim objDataTable As ListObject
Dim varSysAccts As Variant
Set wksData = ActiveWorkbook.Sheets("Test Data")
Set objDataTable = wksData.ListObjects("TestData")
varSysAccts = Worksheets("Lists").Range("SystemAccts")
With objDataTable.Range
'turn off the autofilters as a reset
.AutoFilter
'set the autofilter with the criteria;
.AutoFilter field:=2, Criteria1:=varSysAccts, Operator:=xlFilterValues
'Delete the entire row for the visible cells; _
'skips the header but also deletes the blank row below the table.
.CurrentRegion.Offset(1).EntireRow.Delete
'turn off autofilter
.AutoFilter
End With
End Sub
私は、コードを実行すると、オートフィルタがテーブル内の行が表示されません。
私は、varSysAccts変数が正しく設定されていることを検証しました。
私はオートフィルタ行の基準にカーソルを合わせると、私は次を得る:
私は問題は、テーブルを配列に読み込まれたとき、それは常に動的な配列であることだと思います。しかし、テーブルは1つの列だけです。これをどうやって解決するのですか?
EDITED:以下のコメントでは、条件から配列を削除しました。今私は型の不一致を取得しませんが、フィルタはまだ行を選択しません。
Array()ラッパーを使用せずに、配列として既に試してみてください。 varSysAcctsを使用する –
'SystemAccts'が列であると仮定すると、' varSysAccts = Application.Transpose(Worksheets( "Lists")、Range( "SystemAccts")) '(配列を1次元配列にする) Criteria1:= varSysAccts'。 – YowE3K
YowE3K、それを解決しました!私はあなたに信用を与えることができるように答えとして投稿することができますか?ありがとうございました! – DeNaeL