
■ DLL呼出しエラー
Excelに入力したデータを使ってOracleのデータを登録 or 更新 するためのツールを作っていました。ツールって言っても、わざわざ外だしする理由もないので入力用のExcelにVBAで処理を書いただけですけどね。
ところが、デバッグをしていると関数の値を受取る部分で「実行時エラー '49': DLL が正しく呼び出せません。」と謎のエラーが発生します。

最初は、ロジックが悪いのかと試行錯誤したのですが、最小構成にまで削ってもエラーを突破できません。
呼出し元のソース
'処理対象範囲参照
Dim myRange As Range
'メーカコード(正数、必須、5BYTE固定)
Dim a As Integer
a = errorCheckFormat()
呼び出した関数(抜粋)
' 機能 : 書式エラーチェック共通処理
'
' 戻り値 : Integer型 エラーコード、0が正常
'
' 引き数 :
'
' 機能説明 : 指定された情報に基づいてエラーチェックを行う。
'
Public Function errorCheckFormat() As Integer
'--------------
' 終了処理
'--------------
normalEnd:
errorCheckFormat = 0
Exit Function
End Function
■ 対応
そもそも、今回は処理でDLLの呼出しなんて使っていません。それが何でDLLエラーなんて発生するのかと。
・・・これは、アレか。いつものアレか?
色々と実験して、動いたり、動かなかったりしたのですが、一番安定したのは対象のモジュールを解放(エクスポート)して、インポートする方法でした。
プロジェクトエクスプローラから問題の関数があるモジュールを右クリックして、表示されたメニューから「 *** の解放」をクリック。

エクスポート確認に「はい」をクリック。

保存(保存先は適当)。

これでモジュールがエクスポートされた上で解放(削除)されました。続けて、エクスポートしたモジュールをインポートします。
「ファイル」メニューから「ファイルのインポート」をクリック。

エクスポートしたファイルを選択して「開く」。

■ 後書き
これで解決するって事は、VBAの関数の呼び出しと、DLLの呼出しは内部的には同じものって扱いなのかもしれません。ま、他の処理を呼び出すという意味では同じものですし、わからなくもないですね。
なお、解決後も何度か発生して、そのたびに同じ方法で復旧させていました。
・・・もしかして、私の作りが何か不味いんですかね。
投稿記事の一覧:http://harikofu.web.fc2.com/
--- blog end ---
スポンサードリンク


