• ベストアンサー

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

  • Excel VBAでのコードの書き分け方

    Excel VBAについてご質問します。 プロジェクトの項目を見ると、 Sheet1 ThisWorkbook 標準モジュール などさまざまあると思います。 これらに対して、どこにコードを書いていくべきなのかがわかりません。 例えば、Sheet1にボタンを配置して、それがクリックされたときの動作についてはSheet1に書けばいいのだと思います。 ですが、いろんなシートのコード、フォームのコードなどから呼び出される関数はThisWorkbookか標準モジュールのどちらに書けばいいのか悩んでいます。 それ以外のケースも含めて、一般的にこういう風に使い分けをするというのがありましたら、ぜひ教えてください。 よろしくお願いいたします。

  • Excel VBAでブックを閉じる時、複数のブックが開いていると・・・。

    WinXP+Excel2002なのですが、 ExcelのVBAでつくったアプリの中に、 Application.Quit ThisWorkbook.Close False と記述し、終了させる部分があります。 複数のブックが開いているときにこのプログラムを実行すると、 他のブックまで閉じようとするのですが、 これは何ともならないのでしょうか。 複数のブックを開いた状態でVBEを開くと、 どのブックをアクティブにしておいても、他のブックの モジュールが出てきますよね。これに関係あるのでしょうか。 VBAはそのブックだけに記述することができる・・・のでしょうか? 調べてみたのですがよくわかりませんでした。 基本的なことで恐縮ですが、こんな私にわかるよう 教えてくださる方いらしたらお願いいたします。

  • エクセルVBAでブックを開くとマクロを実行するようにしたいのですが

    ブックを開くと同時に開いたシートを保護するようにしたいのですがうまくいきません。通常(?)ボタンを作っておいて押すと実行すると思うのですが、そうせずにブックを開くと実行するようにならないかと思っています。保護をするコードはわかるのですが、どこにそれを書き込んだらいいのかもわかりません。VBAプロジェクトを見るとSheet1,Sheet2,ThisWorkbook,UserForm1とありますが、そのうちのどこかに置くのでしょうか?

  • 他のExcelファイルのVBAコードを検索したい

    他のExcelファイルに書かれたVBAコードに、ある特定のキーワード(パス名など)が使われているかを自動的に調べるためのVBAを書きたいと思っています。 仕事で使っているマクロが書かれたExcelファイルからある特定の処理をしているマクロを含むものを検索したいのですが、検索するExcelファイルが膨大なため、順番にExcelファイルを開いてVBAコードをチェックしていく工程をマクロ化したいのです。ファイルを順に開いていく処理はマクロ化できるのですが、書かれたVBAコードのチェックをどうしたらよいか悩んでいます。 「VBAコードに対して検索する」または「VBAコードを1行ずつ変数に代入する」、「モジュールシートをテキストファイルに出力する」などの処理が自動化できれば対応できそうなのですが、そのような処理をExcelVBAで作成できるでしょうか。 なお環境はWindowsXPのExcel2003です。 よろしくお願いいたします。

  • VBAで別のExcelブックのボタンのマクロ登録

    Excelブック1とExcelブック2があります。 Excelブック1はVBAで 1)Excelブック2を開いて 2)Excelブック1のワークシート(Sheet1)と  モジュールシート(Module1)を  Excelブック2にコピーします。 3)ワークシート(Sheet1)にはコントロール(ボタン)が貼り付けてあって  このボタンをクリックするとモジュールシート(Module1)の中の  Excute_Button()というプロシージャ(マクロ)を呼び出すため  Excelブック1のVBAで  wb.Worksheets("Sheet1").Shapes.Range(Array("Button 1")).Select  Selection.OnAction = "Excute_Button"  と記述してボタンのマクロの登録をします。   (wbはExcelブック2を指しています) 4)Excelブック2を保存して閉じる。 という処理をしています。 この後、Excelブック1を閉じて、 Excelブック2を開いてワークシート(Sheet1)のボタンをクリックすると Excelブック1が開いてしまいます。 Excelブック2のボタンのマクロの登録のマクロ名を見てみると Excelブック1のファイル名!Excute_Button となっています。 Excelブック1のVBAで、ここを単にExcute_Buttonだけにするには どのようにすればよいでしょうか。

  • ブックをまたぐVBAの呼び出し方法について

    EXCEL2000のVBAについてですが、ブック1とブック2があります。 ブック1からブック2のモジュールを呼び出すには、ブック1にはどのように記述すればよいのでしょうか? 簡単すぎてごめんなさい。

  • Excelで『Microsoft Excel Objects』でのVBA

    こんにちわ。 早速ですが、Sheet1だけ他のBookでも使用する事があり、 Sheet1を移動した時に、VBAコードも一緒に移動させたいので、 『標準モジュール』ではなく、『Microsoft Excel Objects』の 「Sheet1(Sheet1)」部分にVBAコードを記入したいのですが、 他シートをデータを取得したりする処理が出来ません。 制約等あるのでしょうか? また、Sheet1を移動した時に、モジュールも一緒に移動させる事は 可能でしょうか? 宜しくお願いします。

  • エクセルVBAでVBAの修正は出来るのでしょうか?

    エクセルVBAでVBAの修正は出来るのでしょうか? あるエクセルファイルにマクロを組み込んでいます(ユーザーフォームも使用)。 このエクセルファイルを複数個フォルダ内にコピーしています。 このコピーした全てのファイルのマクロの修正をVBAで出来ないかと考えています。 修正箇所はモジュール内のコード修正、モジュールの追加、既存のユーザーフォームにボタン等の追加等です。 エクセルは2003を使用しています。 どなたか教えてください。

  • Excel VBA 非表示の別ブックへシートコピー

    Excel2010のVBAで、別のExcelブックを非表示で開いて、 シートをコピーすると、 「実行時エラー'1004':WorksheetクラスのCopyメソッドが失敗しました。」 というエラーが出て、正しくシートをコピーすることができません。 (1)のように自分のブックへはシートをコピーすることはできるのですが、 (2)のように別のExcelブック上でシートをコピーする場合と (3)のように別のExcelブック上にシートをコピーする場合の いずれも同様のエラーになります。 どのように記述すれば(2)と(3)でもコピーすることができるのでしょうか。 ------------------------------------------------------------- Sub test()  Dim newEx As Excel.Workbook  Dim newFile As String  newFile = ThisWorkbook.Path & "\New_Book.xlsx"  Set newEx = Workbooks.Open(newFile, UpdateLinks:=0)  Application.Windows("New_Book.xlsx").Visible = False  '(1)New_BookのSheet3を自分のブックにコピーする (正常)  newEx.Worksheets("Sheet3").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)  '(2)New_BookのSheet3をNew_Bookにコピーする (エラー)  newEx.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  '(3)自分のブックのSheet3をNew_Bookにコピーする (エラー)  ThisWorkbook.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  Application.Windows("New_Book.xlsx").Visible = True  Application.DisplayAlerts = False  newEx.Save  newEx.Close  Application.DisplayAlerts = True  Set newEx = Nothing End Sub -------------------------------------------------------------

  • Excel2007VBA ブックのアクティブ化

    ●質問の主旨(2点) 1.以下のコードは、なぜエラーが返されるのでしょうか? 2.タスクバーにあるアクティブ状態ではないブックの1枚目シートを 選択するためには、以下のコードをどのように書き換えれば良いでしょうか? ●質問の補足 タスクバーにはエクセルブック「Book1」と「Book2」を表示させ、 「Book1」の「sheet1」がアクティブになっています。 Book1の標準モジュールに以下のコードを記述しています。 Sub sample1() Workbooks("Book2.xlsx").Activate Worksheets("sheet1").Select End Sub しかし実行すると「実行時エラー9インデックスが有効範囲にありません」と エラーが返されます。なぜそうなるのかが分かりません。 ご存知の方がいらっしゃればご教示よろしくお願い申し上げます。 私はVBA初心者です。

専門家に質問してみよう