• ベストアンサー

ExcelのVBAコードを他のBookへ展開

OS:Win2000 Excel2000 ExcelでモジュールシートとThisWorkBookにVBAコードを作成しました。 このVBAを他の16個のExcelブックへ展開するのですが、 何か変更があった場合、16個のbookを修正しなければなりません。 管理が煩雑になるので、避けたいのですが何か良い方法はありますでしょうか? 16個のExcelブックは同じフォルダーで管理され、 Lan又はHttp(Web)で複数人が照会、変更を行います。

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.4

アドインを利用するには、 1.利用者のパソコン内のアドインフォルダにアドインファイルを入れる(ファイルのコピー等) 2.Excelでアドインを追加(登録) して、初めて使用可能になります。 アドインを更新した場合に備えて、利用者がファイルを開いたときに、アドインファイルのバージョンをチェックして書き換えを行うような処理が必要になります。 全ユーザーに「プログラムを変えたからexcelのアドインを更新してください」って通知しても、意味を理解して更新を行う方はどれくらい居るでしょうか・・・。 その辺りを考慮しておかないと、メンテナンスの為に無用な手間が増える可能性も有ります。 上記の事はVBAで処理が可能ですが、後々の事(担当が変わる等)を考えると簡便な方法で行う方が良いかと思います。

INOPII
質問者

お礼

参考Urlを見て試した所、 1.共通マクロのあるブックを拡張子「.xla」で保存。(アドイン化) 2.共通マクロを使用するブックから「WorkBook.Open」で「.xla」を開く と言う処理をすれば、本当の意味での「アドイン」では無いかも知れませんが、 思った事が実現できるようです。 >全ユーザーに「プログラムを変えたからexcelのアドインを更新してください」って通知しても、意味を理解して更新を行う方はどれくらい居るでしょうか・・・。 これは全く期待できません。 クライアントにPGMを持たせ、入れ替えが発生する用ならActiveX等を考えます。 回答ありがとうございました。

その他の回答 (3)

  • at121
  • ベストアンサー率41% (85/206)
回答No.3

#1 の応用と言うか 逆のほうが扱いやすいかも・・。 「16個のいずれかが読み込まれた時点で、 "プログラムBOOK.xls"は、読み込まれている状態であれば」 と言う点について "プログラムBOOK.xls"(プログラムが書かれている) を 主のBookとして 複数人が照会、変更の際 主のBook を開き このBookの(選択ボタンなどで作ったメニュー)マクロ操作から 16個のBookを開く。  場合によっては 共有のため 読み込み専用などのアクセス制限をする。

INOPII
質問者

お礼

お返事ありがとうございます。 マクロのあるブックにメニューを作るって事ですよね? 実はWebページ(ASPプログラム)があってそこにブックの一覧が表示され、 webページのボタンとチェックボックスで開くブックを コントロールしています。 なので、この案はちょっと無理です。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

アドインにして仕舞えば面倒なコードの展開も不要ですし、管理も一括で行えます。 マクロでアドインの組み込みや解除の制御も可能です。 あとは、アドインが修正された場合の自動対応が必要ですね。 なので、#1さんの方法が一番簡単かもしれません。

参考URL:
http://www.asahi-net.or.jp/~ef2o-inue/haifu/sub06_030.html
INOPII
質問者

補足

お返事ありがとうございます。 参考URLを見させていただきました。 アドインなんて機能があるのですね。知りませんでした。 ユーザーさんから別のファイルが開いているのも判らないし、これなら、良さそうな気がします。 ただ、「アドインが修正された場合の自動対応が必要ですね」とはどういう事なんでしょうか? 私はこのアドイン機能は#1さんの提案の「Excelブック(.xls)を開く」って所が「アドイン(.xla)を開く」に変わっただけと理解しているのですが?

回答No.1

こんな方法は、いかがでしょうか? 共通のVBAのプログラムを "共通プログラム1" と、します。 VBAのプログラムの書かれたBOOKを "プログラムBOOK.xls" として、保存します。 他の16個のBOOKには、 Sub 実行するプログラム() ' Application.Run "プログラムBOOK.xls!共通プログラム1" End Sub という、VBAを書きます。 16個のいずれかが読み込まれた時点で、 "プログラムBOOK.xls" は、読み込まれている状態であれば、INOPIIさんの目的通りのことが出来ると思いますが。

INOPII
質問者

お礼

お返事ありがとうございます。 最初はそう考えたのですが、ユーザーにとって関係のないブックを開くのに抵抗があります。 また、Httpでも使用するのですが、ちゃんと動くのかが不安です(テストしてませんが) ちょっとサンプル作ってテストしてみます。

関連するQ&A