0

以前の質問で述べたのと同様に、メインフレームから取得したデータに関連するマクロを構築し続けています。

ここで説明したオートフィルター基準に基づくマクロ拡張機能を使用して、多数のシートを生成しています。参考までに、このコードの要約版は次のとおりです。

Sub AddSheets()

Dim RngOne As Range, cell As Range

For Each cell In RngOne

Sheets.Add After:=Sheets(1)

Sheets(2).Select

Sheets(2).Name = cell.Value

Next


End Sub

データセットを処理していると、選択した宛先にエクスポートされた後に生成されたシートをユーザーが削除する方が便利な場合があります。ただし、使いやすさのために、マクロに関連するシートを保持しようとしています。保持枚数はOR条件上2枚を超えますが、相談の都合上10枚以上まで可能です。私の現在のコードは、このサイトから改作されています。このSO 記事も確認しました。

私のコードは次のとおりです。

Sub DeleteAllButNotedSheets()

Dim IndividualWorkSheet As Worksheet

Application.DisplayAlerts = False

For Each IndividualWorkSheet In ThisWorkbook.Worksheets

    If IndividualWorkSheet.Name <> "Sheet1" Or "Criteria" Or "TemplateSheet" Or "TemplateSheet2" Then
        IndividualWorkSheet.Delete
    End If

Next

Application.DisplayAlerts = True

End Sub

現在、コードは Type Mismatch エラーになります。このエラーのジレンマの修正を求めています。

これに加えて、考えられる条件の数を考慮して、巨大なORリストの代わりにリスト、コレクション、または配列 (ループが与えられた場合) を使用できるかどうかを判断しようとしていますが、これは私には不器用に思えます。このリストの問題に関して、修正または開始するためのアドバイスを求めています。

4

1 に答える 1

2
tmp = IndividualWorkSheet.Name  
If tmp <> "Sheet1" And tmp <> "Criteria" And _
   tmp <> "TemplateSheet" And tmp <> "TemplateSheet2" Then 
      IndividualWorkSheet.Delete     
End If

アレイベースのアプローチ:

Dim arr
arr = Array("Sheet1", "Criteria", "TemplateSheet", "TemplateSheet2")

If IsError(Application.Match(IndividualWorkSheet.Name, arr, 0)) Then
    IndividualWorkSheet.Delete    
End If
于 2012-08-09T17:27:40.973 に答える