ブックを開くときのエラーに対処

エラー

サンプルコード

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ならセーブしてブックを閉じます。

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