DLL が正しく呼び出せません。
-
Contents
- エラー表示
- エラーの発生理由について
- 解決方法は?
- 関連リンク
エラー表示
このエラーが発生すると、実行時に次のエラーが表示されます。
実行時 エラー '49'
DLL が正しく呼び出せません。
エラーの発生理由について
エラーの原因は Excel側のバグのようです。サブルーチンに移動した際に本エラーが発生するようですが、筆者は昨日まで動いていたプロシージャが突然このエラーで動かなくなった記憶があります。
下にエラーのサンプルを記載しますが、このエラーを確実に再現させることが難しいため、あくまで参考としてご覧下さい。
Sub TestFunc1()
Call TestFunc2("test")
End Sub
' 次のプロシージャ呼び出し時、何故かエラー
Sub TestFunc2(ByVal sample as String)
MsgBox sample
End Sub
解決方法は?
職場でこのエラーが発生した時の対応法ですが、エラー先のプロシージャをSubプロシージャからFunctionプロシージャに切り替え、コンパイルし、元のSubプロシージャに戻したらエラーが解消しました。
少し分かり難いかもしれないため、順に説明します。
- 呼び出し先をFunctionプロシージャに変更
- デバッグ → VBAProjectのコンパイル を行う
- 呼び出し先をSubサブプロシージャへ戻す
Sub TestFunc1()
Call TestFunc2("test")
End Sub
' SubサブプロシージャからFunctionへ変更
Function TestFunc2(ByVal sample as String)
MsgBox sample
End Function
Sub TestFunc1()
Call TestFunc2("test")
End Sub
' Subサブプロシージャへ
Sub TestFunc2(ByVal sample as String)
MsgBox sample
End Sub
Microsoft公式の解答
Microsoft公式のリファレンスには、間違った型の引数がルーチンへ渡しているなど、いくつか候補が挙げられています。
参考になるかは不明ですが、時間がある方はどうぞ。
Microsoft公式(DLL を正しく呼び出せません (エラー 49))へ