任意のシートの有無によって処理を分けたい場合に使えるサンプルコードです。
' シートの有無を確認する (1) '
Sub ChkSheetSample1()
Dim xWsheet As Worksheet
Dim xFlag As Boolean
For Each xWsheet In Worksheets
If xWsheet.Name = "確認したいシート名" Then xFlag = True
Next xWsheet
If xFlag = True Then
' 該当のシートがある場合の処理 '
MsgBox "あり"
Else
' 該当のシートがない場合の処理 '
MsgBox "なし"
End If
End Sub
' シートの有無を確認する (2) '
Sub ChkSheetSample2()
Dim xWsheet As Worksheet
On Error Resume Next
Set xWsheet = Worksheets("確認したいシート名")
On Error GoTo 0
If xWsheet Is Nothing Then
' 該当のシートがない場合の処理 '
MsgBox "なし"
Else
' 該当のシートがある場合の処理 '
MsgBox "あり"
End If
End Sub
(1)は確認したいシートがあるか全てのシート内でチェックして、該当のシートがあればxFlagの値をTrueにセットして、該当のシートがある場合の処理を実行します。なお、ブール型(Boolean)の初期値はFalseなので、該当のシートがない場合は、xFlagの値はFalseのままとなり、シートがない場合の処理が実行されます。
(2)は確認したいシート名をSetステートメントでとりあえず代入しています。該当のシートがある場合は、xWsheetにオブジェクトが代入されて、シートがある場合の処理が実行されます。また、該当のシートがない場合は、xWsheetの値はNothingのままとなり、シートがない場合の処理が実行されます。
※ 任意のシート名をそのままSetステートメントに代入した場合、該当のシートがなければ、『実行時エラー '9' :インデックスが有効範囲にありません。』エラーが発生して処理が中断されてしまいます。従って、一旦、"On Error Resume Next"ステートメントでエラーメッセージを非表示にして先に進め、代入後、"On Error GoTo 0"で、先のエラー処理を無効にして(元の状態に戻して)います。

0 件のコメント:
コメントを投稿