DLL が正しく呼び出せません。

エラー表示

このエラーが発生すると、実行時に次のエラーが表示されます。
実行時 エラー '49'

DLL が正しく呼び出せません。

エラーの発生理由について

エラーの原因は Excel側のバグのようです。サブルーチンに移動した際に本エラーが発生するようですが、筆者は昨日まで動いていたプロシージャが突然このエラーで動かなくなった記憶があります。
下にエラーのサンプルを記載しますが、このエラーを確実に再現させることが難しいため、あくまで参考としてご覧下さい。

Sub TestFunc1()
    Call TestFunc2("test")
End Sub
' 次のプロシージャ呼び出し時、何故かエラー
Sub TestFunc2(ByVal sample as String)
    MsgBox sample
End Sub

解決方法は?

職場でこのエラーが発生した時の対応法ですが、エラー先のプロシージャをSubプロシージャからFunctionプロシージャに切り替え、コンパイルし、元のSubプロシージャに戻したらエラーが解消しました。
少し分かり難いかもしれないため、順に説明します。

  1. 呼び出し先をFunctionプロシージャに変更
  2. Sub TestFunc1()
        Call TestFunc2("test")
    End Sub
    ' SubサブプロシージャからFunctionへ変更
    Function TestFunc2(ByVal sample as String)
        MsgBox sample
    End Function
    
  3. デバッグ → VBAProjectのコンパイル を行う
  4. コンパイル
  5. 呼び出し先をSubサブプロシージャへ戻す
  6. Sub TestFunc1()
        Call TestFunc2("test")
    End Sub
    ' Subサブプロシージャへ
    Sub TestFunc2(ByVal sample as String)
        MsgBox sample
    End Sub
    

Microsoft公式の解答

Microsoft公式のリファレンスには、間違った型の引数がルーチンへ渡しているなど、いくつか候補が挙げられています。
参考になるかは不明ですが、時間がある方はどうぞ。
Microsoft公式(DLL を正しく呼び出せません (エラー 49))へ

関連リンク

ページの先頭へ