VC2005(Microsoft Visual Studio 2005)で作成したActivexの関数を
Excel 2003のVBA(VB6)でコンパイルすると
以下の様なメッセージがでてしまいます。
--------------------------------------------
コンパイルエラー
”関数またはインターフェースが予約されているか、
またはVisual Basicでサポートされていないオートメーションタイプが
関数で使用されています。”
-------------------------------------------
ActiveXコントロールテストコンテナでは正常に稼動している関数です。
リボンエクセルとまたいでいるのでもしかして、
VC6でないとだめなのですか?
それともvc2005での設定でなにかあるのでしょうか?
VC6.0とEXECL2003では実績があると言っているのです。
どうしようもありません。
追記
VB2005(Microsoft Visual Studio 2005にあるVB)で
そのActivexの関数を呼ぶと普通に動きます。
まことに申し訳ありませんが、なにかお知りの方はご伝授下さい。
VS2005で新規ウィザードのスケルトンでは再現できませんでした。(MFC)
文字コードかと思い、VC6で作成したActiveXコントロールをVC2005に
変換しても該当のエラーは出ませんでした。再現できる手法はありますか?
また、検索しているとは思いますが
"またはVisual Basicでサポートされていないオートメーションタイプが関数"
で検索すると(ダブルクォーテーション含む)メソッドの引数やら戻り値を
ULONG->LONG型にしたら解決したケースもあるようです。
>VC6.0とEXECL2003では実績があると言っているのです。
え、誰に?
追記です。(少し勘違いされそうな書き方だったので)
VCでのコンパイルはVC6,2005共OKです。
EXCEL2003のVBA上でフォームにコントロールを
貼り付けてコンパイルした結果です。
ATLだと私には分かりません。
すみません遅くなりました。
ありがとうございます。
じつは、このエラーの原因はエクセルがActiveXを初めて読み込んだときに
エクセル側でそのActivexの関数情報を自前で保存してしまい、その後
Activexで引数の変更を行った場合、エクセルで持っている前回のActivex
と今回のActivexの形が違うという理由でエラーを出しているということらしい、真実は解りませんが。
VBAの引数とActivexの引数をあわしてもこのエラーは続きます。
どうにか解決したのですが ↓ に書きます
\\Documents and Setting\(user name)\Local Setting\Temp\VBE
\\Documents and Setting\(user name)\Application Data\Microsoft\Forms
上記フォルダに存在するActivexのファイル(XXX.exd)を削除すると
新しいActivexを利用できるみたいです。