Excel VBA の実行時エラー辞典

実行時エラー '48':コード リソースまたは DLL 読み込み時のエラーです

Declare で呼び出す DLL が、Excel のビット版(32 ビット/64 ビット)や必要な関連ファイルと合っているか確認します。

見出しは Microsoft Learn の一覧表のメッセージです。個別解説の見出しは「DLL 読み込み時のエラーです」です。DLL のファイル自体が見つからない場合は、エラー 53 として表示されることもあります。

よくある原因

直し方

  1. 停止した呼び出しに対応する Declare の Lib 句から、読み込もうとした DLL のファイル名と場所を確認します。
  2. Excel の[ファイル]→[アカウント]→[Excel のバージョン情報]で 32 ビット版か 64 ビット版かを確かめ、同じビット版の DLL を DLL の提供元から入手します。
  3. DLL の提供元の資料で必要な関連 DLL を確認し、指定された場所に配置します。
  4. ファイルのパスと名前も確認します。ファイルがない場合は、エラー 53 の解説も参考にしてください。

元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。

mytool.dll と C:\tools は説明用の架空の名前です。Declare は Sub の中ではなく、標準モジュールの先頭(宣言セクション)に書きます。PtrSafe は Office 2010 以降(VBA7)を前提にしています。引数や戻り値の型は、DLL の提供元の資料に合わせてください。

修正前

' 64 ビット版の Excel で、32 ビット版の DLL を指定している
Private Declare PtrSafe Function ToolVersion Lib "C:\tools\x86\mytool.dll" () As Long

修正後

#If Win64 Then
    Private Declare PtrSafe Function ToolVersion Lib "C:\tools\x64\mytool.dll" () As Long
#Else
    Private Declare PtrSafe Function ToolVersion Lib "C:\tools\x86\mytool.dll" () As Long
#End If

調べ方

  1. エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
  2. 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
  3. DLL の関数を最初に呼ぶ行で止め、F8 で進めてエラー 48 が出るか確認します。
  4. Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? Dir("C:\tools\x64\mytool.dll")

Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。

関連エラー

確認した公式資料