OfficeType

VBA~ワークブックを開こう~Excel

ファイルを開く時はWorkbooks.Openメソッドを使います。

書き方

Workbooks.Open "ファイルパス"

簡単な例

下のコードを実行するとDドライブのサンプル.xlsxが開きます。

Sub test1()
Workbooks.Open "D:\サンプル.xlsx"
End Sub

エラー回避(ワークブックが存在しない時)

上の簡単な例では指定のワークブックが存在しないときはエラーが表示されます。

image-01

ワークブックが存在しないときにメッセージを表示するようにするとエラーが回避できます。下のコードはIf文の条件式にDir関数を使っています。Dir関数はDir(パス,属性)で属性に確認したいファイルの属性に対応した定数を指定します。属性を省略するとパスに一致する標準ファイルが返されるので今回は省略します。パスに確認したいファイルのパスを指定しファイルがあれば、ファイル名を返し、なければ長さ0の文字列""を返します。今回の場合はファイルが存在しない場合にメッセージを表示するので条件式はDir("D:\サンプル.xlsx") = ""になり、Dドライブにサンプル.xlsxというファイルがない場合にメッセージが表示され、Exit Subを実行しコードが終了します。ファイルが存在する場合はDir("D:\サンプル.xlsx") = ""の条件を満たさずIfとEnd Ifの間に書かれたコードは実行しないのでExit Subは実行せずに最後に書かれているWorkbooks.Open "D:\サンプル.xlsx"を実行しDドライブのサンプル.xlsxというワークブックを開きます。

Sub test2()

If Dir("D:\サンプル.xlsx") = "" Then

MsgBox ("指定のワークブックは存在しません")
Exit Sub

End If

Workbooks.Open "D:\サンプル.xlsx"

End Sub

image-02

同名のワークブックが開いている時

上の簡単な例では指定のワークブックと同名のワークブックが開いているときは指定のワークブックは開けません。同名のワークブック開いている時はメッセージを表示しましょう。下のコードはallbookというワークブックオブジェクトを格納する変数を宣言しFor Each allbook In Worksheetsですべてのワークブックを取得するまで一つずつ繰り返していきます。filepathという変数に開きたいワークブックのファイルパスを格納し、そのファイルパスからFileSystemObjectオブジェクトのGetFileNameメソッドをつかってsearchという変数に開きたいワークブックの名前を格納し、繰り返しの構文の中でIf文の条件式にallbook.Name = searchで全てのワークブックの中に開きたいワークブックと同じ名前のワークブックがあるか判断しています。同じ名前のワークブックがあればIfとEnd Ifの間に書かれたコードを実行するので"同名のブックが開いています"とメッセージを表示し、Exit Subででコードが終了します。同名のワークブックが開いていない場合はIfとEnd Ifの間に書かれたコードは実行しないのでExit Subは実行せずに最後に書かれているWorkbooks.Open filepathを実行し指定のワークブックを開きます。

Sub test3()
Dim allbook As Workbook
Dim filepath As String
Dim search As String

Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")

filepath = "D:\サンプル.xlsx"
search = objFSO.GetFileName(filepath)

For Each allbook In Workbooks

If allbook.Name = search Then

MsgBox "同名のブックが開いています"
Exit Sub

End If

Next

Workbooks.Open filepath

End Sub

image-03

ワークブックが存在しない時と同名のワークブックが開いている時のメッセージ確認の組み合わせ

上の2つのメッセージ確認を組み合わせると下のコードになります。

Sub test5()

Dim allbook As Workbook
Dim filepath As String
Dim search As String

Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")

filepath = "D:\サンプル.xlsx"
search = objFSO.GetFileName(filepath)

If Dir(filepath) = "" Then

MsgBox ("指定のワークブックは存在しません")
Exit Sub

Else

For Each allbook In Workbooks

If allbook.Name = search Then

MsgBox "同名のブックが開いています"
Exit Sub

End If

Next

End If

Workbooks.Open filepath

End Sub