- 締切済み
Excelのアドイン
Excelのアドインを作成しています。 特定のファイルにだけ適用したいため、そのファイルのWorkbookのopenイベントでAddin.Installed = Trueにするようにしています。 Addin.Installed = Falseにするタイミングをアドイン側(xlaファイル)のWorkbookのcloseイベントに入れてしまうと Addin.Installed = Falseにした時点で自分自身(xlaのWorkbook_close)を呼び出してしまいます。 if Addin.Installed = Trueを入れていますのでAddin.Installed = Falseが2回実行されるわけではないのですが 再帰的な呼び出しを回避する方法はないでしょうか? 終了時にexcelがエラーを起こして "エラー送信"画面が出てしまって ここら辺があやしいのではと思っています。 環境はWindowsXP Excel2002 SP3 です。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >特定のファイルにだけ適用したいため & >特定のブック、というのが"複数の特定のブック"ですので ブック側の >Workbook_BeforeClose に記述してしまうと1つのブックだけ閉じると同時に >開いていた別の特定のブックのアドインも解除されてしまうので アドイン側 >に入れようとしました。 ご存知なのかもしれませんが、特定のブックと1つのマクロブックとを繋げる設定スタイルというのは、アドインではなくて、「参照設定」ですね。その設定されたブックの1つでも開いている限りは、参照設定された側のマクロブックを閉じることができません。 それを非表示のままにしておけば、アドインとの差はないような気がします。 余計なことかもしれませんが。
- Wendy02
- ベストアンサー率57% (3570/6232)
ちょっと、コード的に良く分からない部分もありますが、特定のブックの、Workbook_Open イベントに、ユーザーのAddin をインストールしたとして、 >Addin.Installed = Falseにするタイミングをアドイン側(xlaファイル)のWorkbookのcloseイベントに入れてしまうと なぜ、アドイン側のWorkbook_BeforeCloseイベントに入れるのですか? アドインを操作するのは、アドイン自身は特に関係ないと思いますが。 特定のブック側のWorkbook_BeforeClose だけで十分では?
お礼
回答ありがとうございます。 特定のブック、というのが"複数の特定のブック"ですので ブック側のWorkbook_BeforeCloseに記述してしまうと1つのブックだけ閉じると同時に開いていた別の特定のブックのアドインも解除されてしまうので アドイン側に入れようとしました。
補足
その後、いろいろ試しましたところ アドインの標準モジュールにSub Auto_Closeを追加してWorkbook_BeforeCloseの記述をそのまま移したところ"エラー送信"画面は出なくなりました。 いろいろ調べているときにExcel 2002 のバグとして"DDE リンクが含まれる Excel ブックを閉じると Excel が予期せず終了してエラー メッセージが表示される"というのを発見しました。このバグはOfficeのSP3をインストールすることで修復されるはずなので修復されているはず、なのですが 現象としてはこれに該当するように思います。 アドインの使い方が間違っているかもしれないのですが とりあえず一番の問題であった"エラー送信"画面は解決しました。 ありがとうございました。
お礼
お礼遅くなり申し訳ありません。 参照設定とアドインの違いをよく理解していないのですが 作成したXLAファイルはデフォルトのADDINSフォルダに入れていて、Excelを起動しれば参照設定しなくてもツールのアドインに分析ツールなどと同様に表示されています。 あああ.xlaとすると それをvbaで特定のブックの起動時に Set a = AddIns("あああ") a.Installed = True というようにcheckedの状態にしてXLAの終了時にFalse(unchecked)にしていますので VBAのコード的にも参照設定はさせていません。このやり方ですとXLSブック側でa.Installed = Falseが実行されると同時に開いている他の特定のブックも同じ状態(unchecked)になりました。それでXLA側に記述しました。XLAにはその他SqlServerからのデータ取得などの共通Functionを入れています。 excelのアプリケーションは殆ど作ったことがなくアドインも今回初めて作りましたので根本的な使い方に無理があるのかもしれません。 アドバイスありがとうございました。