Sheet か Worksheetか
Sheetの中にWorksheetは含まれます。
このためSheetにするとWorksheetに含まれないシートがあればTrueになります。
このため広くSheetsで判定する関数とWorksheetのみで判定する関数を2つ作りました。
グラフ、Excel5.0ダイアログシートなどがある場合はこちらを使います。
複数のワークブックを開いているときにActiveではないWorkBookを指定できる
Sheet/Worksheetの有無を判定するのは多くの場合複数のブックを開いています。
このため、複数のブックのうちどのブックかを選択して判定するようにしました。
グラフ等を使わない場合は、WorkSheetExistsだけでいいと思います。
使用するところ
たとえば複数のブックを開いてワークシートを複写したとき、複写が完了しているかを判定できます。
普通は複数のWorkBookを開いている前提なんてしていないですからね。
豆知識
Workbookを1つしか開いていないときはThisWorkbookでもActiveWorkBookでも同じ結果になります。
コード
Function WorkSheetExists(objWorkbook As Excel.Workbook, strWorksheetName As String) As Boolean
'For Excel VBA
' Dim bl as boolean
' bl = WorkSheetExists(ThisWorkbook, "Sheet20")
' 指定されたWorkBookに指定された名前のWorksheet が存在するか
Dim wss As Worksheets, shs As Sheets
Dim ws As Excel.Worksheet
Dim bl As Boolean: bl = False
On Error GoTo Err_Handle
Set wss = objWorkbook.Worksheets
For Each ws In wss
If ws.Name = strWorksheetName Then bl = True: Exit For
Next
WorksheetExists = bl
Exit Function
Err_Handle:
If Err.Number <> 0 Then Debug.Print "WorksheetExists error occur. " & Err.Number, Err.Description: Err.Clear
WorksheetExists = False
End Function
Function ExcelSheetExists(objWorkbook As Excel.Workbook, strWorksheetName As String) As Boolean
'For Excel VBA
' Dim bl as boolean
' bl = ExcelSheetExists(ThisWorkbook, "Sheet20")
' 指定されたWorkBookに指定された名前のSheet が存在するか
Dim wb As Excel.Workbook
Dim wss As Worksheets, shs As Sheets
Dim ws
Dim bl As Boolean: bl = False
On Error GoTo Err_Handle
Set wb = objWorkbook
'Set wss = wb.Worksheets
Set shs = wb.Sheets
For Each ws In shs
If ws.Name = strWorksheetName Then bl = True: Exit For
Next
WorksheetExists = bl
Exit Function
Err_Handle:
If Err.Number <> 0 Then Debug.Print "WorksheetExists error occur. " & Err.Number, Err.Description: Err.Clear
WorksheetExists = False
End Function