« VBAで警告なしにシートを削除する | トップページ | シート挿入あれこれ »

2010年3月13日 (土)

指定したシートがあるか確認してからそのシートを削除する

VBAでシートを指定して削除しようとしたときに
そのシートがなかったら
このようなエラーになります。
Vba20100313a

このようなエラーを発生させないために
まず、指定したシートが存在するか確認してから
そのシートを削除するプロシージャを作ってみます。

指定したシートが存在するか確認する方法は
アクティブなワークブックのすべてのシートの名前と
指定したシートの名前が一致するかをIf文で調べます。

もし指定したシートが存在したら
そのシートを削除してSheetDelプロシージャ(下にある)を終了します。

すべてのシートを調べても
指定したシートがなかった場合、
「シート"指定したシートの名前"はありません。」
とメッセージを表示します。

macro100313aは、コードの中で使うシートを挿入します。
macro100313bの中で、SheetDelプロシージャを使っています。

存在を確認してからシートを削除するコード:

Sub macro100313b()
'SheetDelの使い方
'()内に文字列でシート名を指定する

    SheetDel ("macro100313a")
   
End Sub

Sub macro100313a()
'シート"macro100313a"の挿入

    Sheets.Add.Name = "macro100313a"
   
End Sub

Sub SheetDel(shname As String)
'ActiveなWorkbookに
'shnameで指定した名前のSheetが存在するか確認してから
'そのsheetを削除する
'なければそのようにメッセージする
   
    Dim sh As Worksheet
   
    For Each sh In Worksheets
        If sh.Name = shname Then
        'Sheetが存在する場合
            Application.DisplayAlerts = False
            sh.Delete
            Application.DisplayAlerts = True
            Exit Sub
        End If
    Next sh
   
    'Sheetがなかった場合
    MsgBox "シート" & Chr(34) & shname & _
        Chr(34) & "はありません。"
       
End Sub

指定したシートがなかった場合のダイアログです。
Vba20100313b

「For Each sh In Worksheets」の部分は、
Worksheets プロパティに入っている
すべてのワークシートを表す Sheets コレクションの中から
一つずつ変数shに入れています。

ワークブックの中のあるシートを返す変数shを使って、
ワークブックの中のあるシートの名前をsh.nameで取得してます。

|

« VBAで警告なしにシートを削除する | トップページ | シート挿入あれこれ »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 指定したシートがあるか確認してからそのシートを削除する:

« VBAで警告なしにシートを削除する | トップページ | シート挿入あれこれ »