目的の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
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ
Comments
  1. Sasaki Tomo より:

    このやり方だと、前方一致のシート名があるとシートがある、と判定されているようです。

    • かもめ かもめ より:

      Sasaki Tomo様
      コメントありがとうございます。
      そうなのですね。数年前の記事ですので、記憶が曖昧ですが今度試してみたいと思います。

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です