VC2005でActivex作成 -> Excel2003(VB6)でコンパイルエラー

解決


Na^2  2010-07-02 00:58:53  No: 71774  IP: 192.*.*.*

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の関数を呼ぶと普通に動きます。

まことに申し訳ありませんが、なにかお知りの方はご伝授下さい。

編集 削除
役には立ちませんが  2010-07-03 06:42:16  No: 71775  IP: 192.*.*.*

VS2005で新規ウィザードのスケルトンでは再現できませんでした。(MFC)
文字コードかと思い、VC6で作成したActiveXコントロールをVC2005に
変換しても該当のエラーは出ませんでした。再現できる手法はありますか?

また、検索しているとは思いますが
"またはVisual Basicでサポートされていないオートメーションタイプが関数"
で検索すると(ダブルクォーテーション含む)メソッドの引数やら戻り値を
ULONG->LONG型にしたら解決したケースもあるようです。

>VC6.0とEXECL2003では実績があると言っているのです。
え、誰に?

編集 削除
役には立ちませんが  2010-07-03 06:53:51  No: 71776  IP: 192.*.*.*

追記です。(少し勘違いされそうな書き方だったので)
VCでのコンパイルはVC6,2005共OKです。
EXCEL2003のVBA上でフォームにコントロールを
貼り付けてコンパイルした結果です。

ATLだと私には分かりません。

編集 削除
Na^2  2010-07-10 08:33:32  No: 71777  IP: 192.*.*.*

すみません遅くなりました。
ありがとうございます。

じつは、このエラーの原因はエクセルが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を利用できるみたいです。

編集 削除