VBAで他のBook(外部のExcelファイル)からデータを取得するプログラムです。
ファイルが存在しない場合や開けないトラブルに対応するため、
エラー処理(On Error GoTo)を追加して、安全にエラー内容をコンソールに出力して終了する実装を解説します。
1. サンプル(エラー処理付き)
data.xlsxというBookの、datasheetシートの、A1の値を出力します。
Sub GetDataFromOtherBook()
' エラーが発生したら ErrorHandler へジャンプ
On Error GoTo ErrorHandler
Dim ex As New Excel.Application ' 処理用Excel
Dim workbook As workbook ' ワークブック
Dim workbookPath As String ' xlsxファイルのパス
' 開くブックを指定
workbookPath = "ここには、PATHを書く\data.xlsx"
' 読み取り専用で開く
Set workbook = ex.Workbooks.Open(Filename:=workbookPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True)
' datasheetというシートのA1のセルの値を出力
Debug.Print workbook.Sheets("datasheet").Range("A1")
' ブックを閉じる
Call workbook.Close
' Excelアプリケーションを閉じる
Call ex.Application.Quit
Exit Sub
ErrorHandler:
' エラーが発生した場合はコンソール(イミディエイトウィンドウ)に出力して終了
Debug.Print "エラーが発生しました: " & Err.Description
If Not workbook Is Nothing Then Call workbook.Close
If Not ex Is Nothing Then Call ex.Application.Quit
End Sub
2. プログラムの解説
元のプログラムに加えたエラー処理と各コードのポイントです。
① On Error GoTo ErrorHandler
「指定したパスにファイルが存在しない」「ファイルが開けない」「指定したシート名(datasheet)が存在しない」といったエラーが発生した際、即座にプログラムを中断せず `ErrorHandler:` の行へ処理をスキップさせます。
② Err.Description
VBAが保持しているエラーの説明文(例:「ファイルが見つかりません」「インデックスが有効範囲にありません」など)を取得し、`Debug.Print` でコンソール(イミディエイトウィンドウ)に出力します。
③ エラー時の後片付け処理
エラー発生時にそのまま終了してしまうと、裏でExcelアプリ(`ex`)が開いたまま残ってしまう可能性があるため、`ErrorHandler:` 内でもブックやExcelアプリを閉じる処理(`Close` / `Quit`)を実行してから安全に終了します。
3. 実行結果
■ 正常に実行できた場合:
A1の値が出力されます
■ ファイルが存在しない・開けない場合(エラー時):
エラーが発生しました: File not found.(※発生したエラー内容が出力されます)