目的のWorksheetがあるかどうかを調べる|VBA

      2018/09/18

openBookを開いているWorkbookとした時、以下の様に”sheet3″のWorksheetを取得しようとして”sheet3″が無い場合に
インデックスが有効範囲にありません。
というエラーが表示されます。

Dim searchSheet As Worksheet
Set searchSheet = openBook.Worksheets("sheet3")
If searchSheet Is Nothing Then
    ' シートがない場合の処理
Else
    ' シートがある場合の処理
End If

シートがあるか無いかを知る方法を調べると、全てのシートを参照して有無を判定する記事が多かったのですが

mk_55’s diary “Excel VBAでシートの存在有無を判定するのにループはいらない。On Errorステートメントを使おう”

という記事を見つけました。おかげでこの記事を参考に、ループなしで判定可能になりました。try~catch的なのが無いのかと思ってましたが、それに近い感じですね。

Dim searchSheet As Worksheet
Set searchSheet = Nothing
On Error Resume Next ' エラーが発生しても次の行から実行.
Set searchSheet = openBook.Worksheets("sheet3")
On Error GoTo 0 ' On Error Resume Next を使用して有効にしたエラー処理を無効にする.
If searchSheet Is Nothing Then
    ' シートがない場合の処理
Else
    ' シートがある場合の処理
End If

 - VBA