web-dev-qa-db-ja.com

Excel-VBAに特定のシートが存在するかどうかを確認するにはどうすればよいですか?

Excel VBAを使用してExcelドキュメントに特定のシートが存在するかどうかを確認する方法を誰かが知っていますか?

10
Vivian

(残念ながら)そのようなメソッドは利用できませんが、これをチェックする独自の関数を作成できます。

以下のコードがあなたのニーズに合うことを願っています。

Edit1:deleteステートメントも追加されました...

Sub test()

    If CheckSheet(Sheets(3).Name) then

        Application.DisplayAlerts = False
        Sheets(Sheets(3).Name).Delete
        Application.DisplayAlerts = True

    End If

End Sub

私が行く解決策...

Function CheckSheet(ByVal sSheetName As String) As Boolean

    Dim oSheet As Excel.Worksheet
    Dim bReturn As Boolean

    For Each oSheet In ActiveWorkbook.Sheets

        If oSheet.Name = sSheetName Then

            bReturn = True
            Exit For

        End If

    Next oSheet

    CheckSheet = bReturn

End Function

または、積極的にエラーを発生させるコードを使用しても構わない場合(一般的なコーディングのベストプラクティスでは推奨されません)、以下の ' Spartan Programming wannabe'コードを使用できます...

Function CheckSheet(ByVal sSheetName As String) As Boolean

    Dim oSheet As Excel.Worksheet
    Dim bReturn As Boolean

    For Each oSheet In ActiveWorkbook.Sheets

        If oSheet.Name = sSheetName Then

            bReturn = True
            Exit For

        End If

    Next oSheet

    CheckSheet = bReturn

End Function


Function CheckSheet(ByVal sSheetName As String) As Boolean

    On Error Resume Next
    Dim oSheet As Excel.Worksheet

    Set oSheet = ActiveWorkbook.Sheets(sSheetName)
    CheckSheet = IIf(oSheet Is Nothing, False, True)

End Function
13
Tiago Cardoso

このような何かがあなたを始めるでしょう:

On Error Resume Next

Dim wSheet as Worksheet
Set wSheet = Sheets(1) ' can also be a string, such as Sheets("Sheet1")

If wSheet Is Nothing Then
    MsgBox "Worksheet not found!"
    Set wSheet = Nothing ' make the worksheet point to nothing. 
    On Error GoTo 0 
Else 
    MsgBox "Worksheet found!"
    Set wSheet = Nothing ' set the found Worksheet object to nothing.  You can use the found wSheet for your purposes, though.  
End If

このコードは http://www.ozgrid.com/VBA/IsWorkbookOpen.htm に基づいています。 DoesSheetExist()サブルーチンを探します。

お役に立てれば!

3
Paul McLain
On Error GoTo Line1
If Sheets("BOX2").Index > 0 Then
Else
Line1: MsgBox ("BOX2 is missing")
end if 

私はこのようにしました:)

0
Rens Slenders

以下に示すように、このコードをIBM Notes(以前のLotus Notes)で使用されている言語の1つであるLotusScriptで使用できるように調整しました。

Public Function ExcelSheetExists( _
    xlBook As Variant, _ ' Excel workbook object
    ByVal strSheetName As String _
    ) As Boolean

    On Error GoTo errHandler

    ForAll xlSheet In xlBook.Sheets
        If xlSheet.Name = strSheetName Then
            ExcelSheetExists = True
            Exit Forall
        End If
    End ForAll

    GoTo Done

errHandler:
    ' Call MyCustomErrorHandler()
    Resume Done
Done:

End Function
0
John D