Excel VBA

【Excel VBA】【マクロ】【Tips】ブックが開いているか確かめる

こんにちは!Lenocoです。本日も見てくださりありがとうございます。

今回はブックについてのTips回です!!!

ブックが開いているか確かめる

ブックが開かれているかどうか確認し、
開いていたらそのブックをWorkbook変数にいれ、
開いていなければ指定されたブックを開き、Workbook変数に入れるマクロをご紹介します。

ブックが開かれているかどうか判定するマクロ

Sub Sample()
    Dim wb As Workbook
    Dim tgtWb As Workbook
    Dim filePath As String
    Dim flg As Boolean

    filePath = "C:\Users\Lenoco\Desktop\ブック.xlsx"
    flg = False

    For Each wb In Workbooks
        If wb.FullName = filePath Then
            flg = True
            Exit For
        End If
    Next wb

    If flg Then
        '既に開いている
        MsgBox "既にブックが開かれています。"
        Set tgtWb = wb
    Else
        '開いていないので開く
        MsgBox "ブックが開かれていないので開きます。"
        Set tgtWb = Workbooks.Open(filePath)
    End If

    tgtWb.ActiveSheet.Range("A1") = "test"

End Sub

コードの説明

開いているブックをループする用のWorkbook変数「wb」、開きたいブックを入れるWorkbook変数「tgtWb」(target Workbookの意味)を作成し、
ブックのパス保存用の「filePath」、フラグ保存用の「flg」を作成します。
開きたいブックのパスを変数に入れます。
初期値として「flg」にFalseを入れておきます。
開いているブックをループし、一つずつ見ていきます。
開きたいブックのパスと一致するブックがあったら、
「flg」にTrueをいれ、「Exit For」でループを抜けます。
「flg」がTrueだったら、If文に入ります。
※「If flgThen」で、「If flg=True Then」の意味になります。
「flg」がTrueということは、すでに指定したブックが開かれている、ということなので
「wb」を「tgtWb」にセットします。
「flg」がFalseだったら、Elseに入ります。
「flg」がFalseということは、指定したブックが開かれていないということになります。
ブックを開き、「tgtWb」にセットします。
該当のブックのアクティブシートのA1セルに「test」という文字列を入力します。

上記のマクロで、ブックが開かれているかどうかのチェックができますが、
万が一、存在しないブックを指定してしまった場合に備え、
指定したブックが存在するかどうかの判定も入れておくと安心かもしれません。

ブックが存在するかの判定を追加したマクロ

Sub Sample()
    Dim wb As Workbook
    Dim tgtWb As Workbook
    Dim filePath As String
    Dim flg As Boolean

    On Error GoTo err

    filePath = "C:\Users\Lenoco\Desktop\ブック.xlsx"
    flg = False

    For Each wb In Workbooks
        If wb.FullName = filePath Then
            flg = True
            Exit For
        End If
    Next wb

    If flg Then
        '既に開いている
        MsgBox "既にブックが開かれています。"
        Set tgtWb = wb
    Else
        '開いていないので開く
        MsgBox "ブックが開かれていないので開きます。"
        Set tgtWb = Workbooks.Open(filePath)
    End If

    tgtWb.ActiveSheet.Range("A1") = "test"
    Exit Sub
err:
    MsgBox "指定されたファイルがありません。ご確認ください。"
    
End Sub

追加分のコードの説明(エラー部分)

プログラムが停止してしまうのを防ぐため、On Errorステートメントを使用します。
指定したファイルが無い場合エラーとなり、「err」という名称のエラー処理に飛び、メッセージを表示して処理を終了します。
※「err」は独自に付けた名称なので、他の名称でもOKです。
1点注意したいのが、「err」の直前の「Exit Sub」を入れることです。
「Exit Sub」で、Subプロシージャを抜けることができます。
正常に処理が進んでいたときに、「Exit Sub」がないと、
「err」の処理まで実行されてしまうためです。

さいごに

いろいろなエラーまで想定してコードが作れるとさらに良いコードになりそうです!

Lenoco

COMMENT

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