サンプルコード
Sub BookOpenTest()
Dim wb As Workbook
On Error Resume Next
'ブックを開いて変数へ格納
Set wb = Workbooks.Open(ThisWorkbook.Path & "\sample.xlsx")
On Error GoTo 0
If wb Is Nothing Then
MsgBox "ファイルが開けませんでした。"
Exit Sub
End If
'wbのデータを読み込む処理
Debug.Print wb.Worksheets("Sheet1").Range("A1")
'データブックを保存せずに閉じる
wb.Close SaveChanges:=False
End Sub
ブックを開いて変数に入れる
ブックは開くにはフルパスを指定して開きます。開いたブックはアクティブになっています。
Workbooks.Openは、開いたブックオブジェクトを返してくれるので、それを変数に格納する事ができます。
Sub BookOpenTest()
Dim ws As Workbook
Set wb = Workbooks.Open(ThisWorkbook.Path & "\sample.xlsx")
End Sub
ブックを開くのに失敗した場合
ファイルが存在せずに開く事ができなかった場合、エラーが発生します。
この時、
Set wb = Workbooks.Open()
と代入する時点でエラーとなるため、後から ws が空であるのを確認しても手遅れになります。
このようなケースでは、予めエラーが出ないように On Error Resume Next で設定にして対策します。
最後は元通りエラーが出るように On Error GoTo 0 で戻します。
On Error Resume Next
(何らかの処理)
On Error GoTo 0
こうすると、括弧部分の処理でエラーが発生しても無視されます。
後から ws が空であるのを確認すれば良いので、以下のようにすれば、ブックが開けなかった場合にエラーを出さずに対処できます。
On Error Resume Next
Set wb = Workbooks.Open(ThisWorkbook.Path & "\sample.xlsx")
On Error GoTo 0
If wb Is Nothing Then
MsgBox "ファイルが開けませんでした。"
Exit Sub
End If
ブックを閉じる
ブックを閉じる時には、Close だけだと、セーブするかどうかのダイアログが出てしまいます。
これを防ぐには、オプションでセーブするかしないかをセットします。
wb.Close SaveChanges:=False
Falseならセーブしない、Trueならセーブしてブックを閉じます。