別ブックを開く

中級VBA

VBAで別ブックを開く方法

 VBAでブックを開くには、Open メソッドを使用します。

パスとファイル名を指定して開く

 引数には、ファイル名の他にパスを指定します。
 ファイル名の拡張子は省略できません。

    Workbooks.Open Filename:= _
        "C:\Users\UserName\Documents\Test\Book2.xlsx"

引数が1つの場合は、「Filename:=」を省略して書く事もできます。

    Workbooks.Open "C:\Users\UserName\Documents\Test\Book2.xlsx"

同じフォルダにあるブックのパス

 同じフォルダ内にあるブックは、パスを指定せずにファイル名だけでも開くことが出来ます。
 (通常はパスを指定して書く事が多いです。)

    Workbooks.Open "Book2.xlsx"

 マクロを実行しているブック(ThisWorkbook)と同じフォルダは以下のコマンドで取得できます。

 ThisWorkbook.Path

 組み合わせて書くと以下のようになります。

    Workbooks.Open ThisWorkbook.Path & "\" & "Book2.xlsx"

 パスとファイル名の間に \ を付けるのを忘れないようにしましょう。

 尚、既に開いているブックをOpen メソッドで開いても特にエラーとはならないようです。

ファイルダイアログを出して開く

 ダイアログを出して開きたいブックを指定したい場合は、ファイル名(フルパス)を取得してからOpenします。
 
 以下のプログラムでは、ファイル名(vfilename)をバリアント型で定義しています。
 失敗すればFalseとなり、成功すればフルパスを文字列で取得できます

Sub getMyFileNameAndOpen()
    Dim vfilename As Variant
    
    ChDir ThisWorkbook.Path      '開くフォルダを指定したい時
    
    vfilename = Application.GetOpenFilename("Excelブック,*.xls?")
    
    If vfilename = False Then
        Exit Sub
    End If
    
    Debug.Print vfilename
    'ファイル名がフルパスで得られるので、Openする。
    Workbooks.Open vfilename
    
End Sub

開いたブックはアクティブ状態となる

 新しいブックを開いた時には、そのブックがアクティブになっています。
 シート上のセルの値を取得したい場合は、どのブックを対象にしているかを意識する必要があるでしょう。
 
 Range(”A1″)とした場合は、新しく開いたブックのアクティブシートの A1 が対象となります。
 
 元のブック(マクロを実行したブック)を取得したい場合は、ThisWorkbookを指定します。
 現在アクティブになっているブックは、ActiveWorkbook.Name で、ブック名を確認できます。

Sub myBooksName()
    Debug.Print ThisWorkbook.Name   '元のブック名
    MsgBox ActiveWorkbook.Name      '新しく開いたブック名
End Sub

コメント

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