ワークブックの3種類の指定方法

このページではワークブックオブジェクトの指定方法を説明します。

ワークブックオブジェクトもワークシートオブジェクトの指定方法と同様にインデックス(整数型)で指定する方法と、ワークブックの名前(文字列型)で指定する方法があります。

さらに ThisWorkbook という実行したマクロが組み込まれたワークブックを指し示すワークブックオブジェクトが使用できます。

  • インデックスで指定する方法
  • ⇒ 1 ~ Workbooks.Count の範囲で指定(この範囲外はエラー)
     
  • ブック名で指定する方法
  • ⇒ 既に開いているブック名(半角/全角、大文字/小文字区別あり)を指定
    (存在しない場合はエラー)
     
  • ThisWorkbook で指定する方法
  • ⇒ 実行したマクロが組み込まれているワークブックを指します。
スポンサーリンク

使用方法

構文
Workbooks( Index | BookName )

※実行したマクロが組み込まれているブックを指定する場合
ThisWorkbook

マクロを記述する際に、マクロが組み込まれたブックを直接ファイル名で記述してしまうと、ファイル名が変更になった場合にマクロを修正する必要があります。
ThisWorkbook を使用するとこのようなことは発生しませんので、有効に活用しましょう。

使用例(前ページ掲載のサンプルマクロ)

前ページ Open メソッド一連のチェックをしてからワークブックを開く の再掲です。マクロ実行時の事前準備などはリンク先を参照してください。

このサンプルマクロでは、ワークブックを開く前に同一ブック名が既に開かれているか(チェック①)、ファイルが存在するか(チェック②)のチェックしています。

前者のチェック過程で、マクロが組み込まれたブックのパス(ThisWorkbook.Path)を使用して、開く対象ワークブックのパスを構築してから、ワークブックコレクション内をインデックス指定で名前のチェックをしています。

Sub sample_eb083_01()
    Dim TargetFile      As String
    Dim TargetFilePath  As String
    Dim flg_opened      As Boolean
    Dim i               As Integer

    '開きたいファイル名
    TargetFile = "test.xlsx"

    'TargetFileがマクロが組み込まれたブックと
    '同じフォルダにあるものとしてファイルパスを作成。
    TargetFilePath = ThisWorkbook.Path & "¥" & TargetFile

    '★チェック① : 既に開かれていないかチェック
    flg_opened = False
    For i = 1 To Workbooks.Count
        If Workbooks(i).Name = TargetFile Then
            flg_opened = True
            Exit For
        End If
    Next i

    If flg_opened Then
        '既に開かれている場合
        MsgBox "『" & TargetFile & "』は既に開かれています。", _
                vbExclamation
    Else
        '★チェック② : ファイルの存在チェック
        If Dir(TargetFilePath) = "" Then
            'ファイルが見つからない場合
            MsgBox "『" & TargetFile & "』が見つかりません。", _
                    vbExclamation
        Else
            'ファイルが存在している場合
            Workbooks.Open TargetFilePath
            MsgBox "『" & TargetFile & "』を開きました。", _
                    vbInformation
        End If
    End If
End Sub

 ThisWorkbook  ワークブックの名前とパス  ワークブックCount
 For…Next Exitステートメント MsgBox関数 Dir関数

タイトルとURLをコピーしました