目的のWorksheetがあるかどうかを調べる|VBA
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
このやり方だと、前方一致のシート名があるとシートがある、と判定されているようです。
Sasaki Tomo様
コメントありがとうございます。
そうなのですね。数年前の記事ですので、記憶が曖昧ですが今度試してみたいと思います。