質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

4459閲覧

C#で作成したDLLをVBAで実行時に「オートメーション エラー(80131040)」

OlivePopeye.net

総合スコア26

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1グッド

1クリップ

投稿2017/07/26 02:05

いつも参考にさせてもらっています。

早速ですが、表題の件で相談させていただきたいと思います。

C#にてCOM参照可能なDLLを作成しているのですが、最初は正常に実行できるのですが、
DLLコード修正をしてRegAsmで登録して...を繰り返していると、VBA利用時に
「オートメーション エラー(80131040)」
が発生して実行できなくなってしまうことがありました。

おおよその原因は、

  • 公開しているクラスに関数やプロパティを追加したDLLをRegAsmで登録解除せずに

そのまま登録してしまっていること

ではないかとは思っています。
が、一度「オートメーション エラー(80131040)」が発生してしまうと、復帰することが出来ないのです。
(発生後に登録解除をしても改善されない)
GUIDを変えれば復帰は可能ですが、レジストリにゴミが溜まってしまう気がしています。

こういう場合、どう対応すれば正しくCOM参照可能なDLLの更新ができるのでしょうか?
COM参照可能なDLL開発/公開する場合の手順として、教えていただけると助かります。

不明な点が有りましたら指摘をお願いします。

よろしくお願いします。

Tak1wa👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

VBAで参照設定を張り直してはどうでしょうか?

基本的にはインターフェースが変わったときには regasm /u で登録解除→ビルド→ regasm で登録の手順が必要です。

投稿2017/07/26 02:13

koguma98

総合スコア288

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

OlivePopeye.net

2017/07/26 02:35

回答ありがとうございます。 上記参考にVBA参照設定のチェックOFF/ONをしてみましたが、改善はされませんでした。 (regasm解除 → VBA参照設定OFF → VBA保存 → regasm登録 → VBA参照設定ON → ✕) 一度、regasmを2重で登録(interfaceに差がある状態)してしまうと、解除することは出来ないのでしょうか・・・・
koguma98

2017/07/26 03:06

interfaceごとに登録内容が変わりますので、完全な解除はできません。 interfaceが変わる前のDLL(またはソース)があればそれを使って解除はできます。 いったん、GUIDを変更して対応し、以後は登録解除→DLLビルド→登録の順に操作するように注意すると良いでしょう。
OlivePopeye.net

2017/07/26 03:35

回答ありがとうございます。 登録解除するためには、「interfaceが変わる前のDLLで実施する必要がある」のですね。 (登録解除を修正後のものでできると勘違いしていたことが要因でした。。。。。) 内容理解出来ました。 協力ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問