今回の条件は
- 開発環境はVisual Studio 2019
- dll用のプロジェクトは何年も管理し、設定が間違えている説は今更ない
- ターゲットはx86
- 「COM相互運用機能の登録」にチェック
- 「アセンブリに署名する」にチェック
- 厳密な名前のキーは選択している
- インストーラー作成環境はInstallShield Limited EditionからMicrosoft Visual Studio Installer Projectsに変更
- dll用プロジェクトはプライマリ出力、RegisterプロパティはvsdrpCOMへ
- レジストリをイジる設定はなし
で、Install Shield製を使用したことのあるPC、ないPC、それぞれWindows7~10まで試し済。
開発環境入りの端末でExcelの参照設定を見ると、dllへのパスがおかしい問題はありましたが、それはまた別の機会に語るとして。
開発環境のない一般的なPCで、Excel(VBA)からdllを使用しようとすると、コンパイルエラーにはらないけど、実行するとオートメーションエラーになる、なんて現象が起こってました、が今回の話。
説明:オートメーション エラーです。
指定されたファイルが見つかりません。
エラーコード:-2147024894
まず解決策から
RegAsmを叩く。
しかも、一度/unregisterで解除してから、/codebaseをつけて叩く、の順番が大事っぽい。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe dllへのパス /unregister
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe dllへのパス /codebase
今回の原因
OSセットアップでユーザをつくる→Administratorを有効にする→作ったユーザは削除する。
この環境だと、Install Shield製ならちゃんと動き、Visual Studio Installer Projects製なら実行時にオートメーションエラーになる、なんてオチなもよう。
こうなると、SYSWOW64フォルダやExcelインストールフォルダにdllを置いても解消しない。
RegAsmで/codebaseをつけようが、/tlbをつけようが効果はない。
あくまで、解除して再登録、が大事っぽい。
なんでや。
他にもニッチなIT関連要素をまとめていますので、よければ一覧記事もご覧ください。