2016-08-23 5 views
1

{A2、A3、...}のリストと名前サマリーのシートを除いて、現在のブック内のすべてのシートを削除します。 私は、次のコードVBAを使用して指定された名前のセットまですべてのシートを削除

Dim MyCell As Range, MyRange As Range 


    Set MyRange = Sheets("Summary").Range("A2") 
    Set MyRange = Range(MyRange, MyRange.End(xlDown)) 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

    Set wbook = ActiveWorkbook 
    For Each xWs In wbook.Worksheets 
    For Each MyCell In MyRange 
     If xWs.Name <> MyCell.Value And xWs.Name <> "Summary" Then 
      xWs.Delete 
     End If 
    Next MyCell 
Next 
    Application.DisplayAlerts = True 
    Application.ScreenUpdating = True 

を書いたが、私はそれが何であるかわからない、実行時エラーが表示されます。 その後、私は行ずつ実行してみました:「xWs.Name =概要」を超える最初のループでは何の問題は、私はこのコードがあることを知っている私は

If xWs.Name <> MyCell.Value And xWs.Name <> "Summary" Then 

でエラーを取得する第二のシートのために最初は存在しません名前が一致しても名前の集合まで実行されているので、効率的ではありません。しかし、私は効率的な方法でVBAのトウセットをどのように比較できるか分かりませんでした。 picでは、A列の名前のリストを見ることができます。

+0

あなたの範囲(A2、A3、...)にその名前を持つシートなしの文字列を持っている場合、それはエラーがスローされます。リスト内のすべてのワークシート名が存在することを確認しましたか? –

+0

以下のコードを試してください –

+0

@ShaiRado:私は写真を追加しました。すべてのワークシート名がリストに表示されるべきではありません。それはリストの中の名前を持つシートだけを保つことです。 – maniA

答えて

1

少し違うので、このシートを削除しないようにフラグを立てる必要がある場合は、すべてのシートの範囲をループする必要があります。 以下のコードを試してみてください。

Sub DeleteSelectedSheets() 

Dim MyCell As Range, MyRange As Range 
Dim wbook As Workbook, xWs As Worksheet 
Dim DeleteSheetFlag As Boolean 

Set MyRange = Sheets("Summary").Range("A2") 
Set MyRange = Range(MyRange, MyRange.End(xlDown)) 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

Set wbook = ActiveWorkbook 

For Each xWs In wbook.Worksheets 
    DeleteSheetFlag = True 

    For Each MyCell In MyRange 
     Select Case xWs.Name 

      Case MyCell.Value, "Summary" 
       DeleteSheetFlag = False 
       Exit For 

     End Select 

    Next MyCell 

    If DeleteSheetFlag Then 
     xWs.Delete 
    End If 

Next xWs 

Application.DisplayAlerts = True 
Application.ScreenUpdating = True 

End Sub 
+0

Shai Radoさん、ありがとうございました! – maniA

+0

あなたは大歓迎です:) –

+0

@Shani質問:シートの名前に範囲Aの文字列が含まれている場合は、条件を取得するためにコードを操作しようとしました。 'Case ** Like MyCell.Value、' Summary '' 'DeleteSheetFlag = False'のようなものがあります。しかし、それは正しい方法ではありません、あなたは** case **と** like **をどのように組み合わせることができるか考えていますか? – maniA

関連する問題