• 締切済み

[VBA] マクロファイルの管理について

こちらの識者の方々にはいつもお世話になっております。 VBAの質問で、環境は下記になります。 OS=windows7 pro 64bit Office=Excel2010(14.0.7128.5000) 業務でたくさんのマクロを作成(仮にA-Zとします)し、複数人が使用しているのですが、作成しすぎて管理が大変になってきました。 そこで、1つのxlamファイル(仮にmasterファイルとします)に全ての実行コードを書き、A-Zのファイルからはmasterファイルを読み取り専用で開き、指定のプロシージャを必要な引数を渡して呼び出すだけのコードを記載する、という方式に変えようと思っています。(masterファイルには書き込みのパスワードを設定します) masterファイルのコードは全て標準モジュールに記載し、基本的には1モジュールあたり1プロシージャにしようと思っています。(masterのプロシージャから別のプロシージャを呼び出すことはせず、A-Zのマクロからmasterの1つのプロシージャを呼び出して完結させる) さらにFunctionや定数用のモジュールを一つ作り、よく使うfunctionや定数などはそこに書こうと思っています。 メリットとしては下記のようなものがあげられると思っています。 ・コードの改修が容易(誰かが開いていても改修できる) ・作成したマクロの管理が容易 ・よく使うFunctionなどは1回だけ書けばどのプロシージャでも使いまわせる この運用方法で問題ないと思っているのですが、懸念されるような事項はありますでしょうか? また別件なのですが、masterファイルのセキュリティを高める意味で、 「A-Zのファイルから開く以外の手段でmasterファイルが開かれた場合は、自動でmasterファイルを閉じる」 というような処理は可能でしょうか? 例えば、workbook_openイベントなどを使って、特定の引数が受け渡されなければ thisworkbook.close false などでmasterファイルを閉じる、といったような感じです。 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

みんなの回答

回答No.1

素人の目線からで申し訳ありませんが・・ もちろん運用の仕方によりますが、 応用したい(処理を「今だけ」若干変えたい)に対応しづらいのが 大きなデメリットなのかもしれません。 マスターファイルでも結構かと思うのですが、 必要と思われるプロシージャをエクスポートして、 まるっきり別なファイルとして持ち、 必要に応じてインポートして使う、 という運用ではどうなのでしょう? どちらにしても作成蓄積用のマスターファイルは 必要なのかもしれませんが 誤上書き・誤削除等の危険は更に減ると思いますし、 知らぬ間に改訂されていて 「AA-ZZファイルに最適化されて、A-Zファイルには不適」 という予期せぬ事故も防げるのではないでしょうか。 改訂するたびに配布した全カ所を書き換える・・ という手間が発生するのがデメリットかもしれませんが・・

rihitomo
質問者

お礼

ありがとうございます。 参考になりました。

関連するQ&A

  • VBAマクロのオブジェクト名の最大の長さについて

    こんにちは。 現在、32bit版Vistaで、Excel2007のVBAマクロについて勉強しています。 添付しました画像のように、自分で作成した標準モジュールのオブジェクト名の所に 「Functionプロシージャを使用したマクロ」 と入力すると、 「オブジェクト名が不正です・・・」 というエラーが表示されます。 どうやら、文字数が多すぎたようで、 「Functionプロシージャの使用」 だと、エラーは出ません。 VBAマクロのオブジェクト名の最大の長さって、どうやって決まるのでしょうか? どこかで、255文字までと聞いた事がある気がするのですが、今回だと、40バイト程度でエラーが出ます。 これについて、何か知っておられる方がいらっしゃれば、是非アドバイスを頂きたいと思います。

  • ACCESSのマクロに関しまして

    お願いします。 ACCESS97で追加クエリを作成し、その後自動起動にしようと思い、マクロで追加クエリを項目に入れマクロを作りました。 マクロを作成する際に、モジュールでレコード追加するテーブルを一度削除しようと思い、「DELETE文」でモジュールを作成し、マクロの追加クエリの前に「プロシージャの実行」でモジュールのプロシージャを実行するようマクロに記述しました。 <マクロ内容> (1)「プロシージャの実行」  (追加クエリで追加するテーブルの中身をDELする) (2)「クエリを開く」  (追加クエリでレコード追加) この用に記述し、マクロ名を「AutoExec」で記述して、ファイルを実行してもマクロが起動しません。 (1)の「プロシージャの実行」までは、実行されているようなのですが(テーブル内確認)、以降の追加クエリが実行されません。 何か他の設定があるのでしょうか? お願い致します。

  • マクロを効率よく作成するには

    会計事務所で、エクセルのマクロの作成をよく行います。 ですが、新しいマクロを作成する時に、すべてタイピングしてコードを書いているのが、もっと効率良くするほうほうがある様な気がしています。 ネットで検索すると、クラスモジュールの利用が良いらしいのですが、少し使ってみても、今一つ理解ができません。 標準モジュールで子プロシージャを使っても同じ事だと感じてしまいます。 そこで、クラスモジュールで効率が上がるポイントと、クラスモジュールでなくても、何かマクロ作成の効率を上げる方法を、ご教授頂ければと思います。 宜しくお願い致します。

  • マクロ subプロシージャーは指定できない?

    accessのマクロの アクション:プロシージャの実行 は、 subプロシージャーは指定できないのでしょうか? 標準モジュールに Sub test1() MsgBox "プロシージャーの実行のテストです" End Sub Function test2() MsgBox "プロシージャーの実行のテストです" End Function と作り、 マクロのプロシージャの実行で プロシージャ名をtest2()にすると、うまく表示されますが、 test1()だと、失敗します。 subプロシージャーをマクロで呼び出す方法を教えてください。

  • VBAでの戻り値と引数について

    最近VBAでプログラムを勉強しています。 引数と戻り値について教えてください。 定義としては、 引数:プロシージャに渡される定数、変数、および式。 戻り値:呼び出し元に処理の結果を戻す値。 となっているのですがいまいちピンときません。 SubプロシージャとFunctionプロシージャでその違いがあると思うのですが、具体的にどれが引数でどれが戻り値なのかわかりません。 他のプログラミングも全く経験がない初心者で初歩的な質問ですみませんがご教授お願いします。

  • エクセルのマクロで別ファイル(エクセル)のマクロを実行させるには?

    エクセルにおいてマクロを組んでいます. 1.実行させたいマクロAが組んであるファイル(Aファイルとします)が多数あります。またマクロAはモジュール内(Module1)に作っております。 2.1のマクロAを別のエクセルファイル(Bファイルとします)のマクロBで実行させたい. 上記のようなことを行いたいのですが可能でしょうか?さらに言えば、マクロBによってマクロAのプロシージャを指定して実行させることは出来るでしょうか? 現在は、マクロBによってマクロAを組んであるAファイルを開き、Aファイルのマクロの中にファイルを開いたときにマクロAを実行させる(イベントドリブン)ようにしています. 直接、マクロBでAファイルのマクロAを動かせるようになればマクロAにイベントドリブンなコードを組む手間がなくなるので、なんとかそのような事が出来ないでしょうか? どうか、詳しい方ご教授ください。 よろしくお願いいたします。。。

  • ExcelのMacroOptionsメソッド

    エクセルのFunctionプロシジャーにてユーザー定義関数を作成したのですが その説明を[マクロ オプション] ダイアログ ボックスにいれようとMacroOptionsメソッドにて 説明をいれました。 このメソッドの実行イベントはWorkbooks_Openイベントでいれればいいとのことですけど ユーザー定義関数をいつでも使用したいので、エクセルブック本体にマクロとして組み込む のではなくアドインマクロとして、作成した標準モジュールのあるエクセルをアドインとして xlamで保存し、アドインを参照することにより使用したいと考えています。 その際、このユーザー関数の説明をいれるためにMacroOptionsメソッドをいれたいのですが xlamのThis_WorkBookモジュールのWorkbooks_Openイベントにいれましたが、実行されず [マクロ オプション] ダイアログ ボックスに表示されません。 どのモジュールのどのイベントにいれるのでしょうか? できることならxlam内のモジュールにいれたいのですが・・・・

  • エクセルマクロの記録で記録した、ショートカットキーで起動するプロシージャの移動方法

    エクセル2002で、マクロの記録で記録した、ショートカットキーで起動するプロシージャを作成しました。このプロシージャは、作成するたびに新たなモジュールを自動で造りその中に記録されます。  このように作成したプロシージャを一つのモジュールにまとめたいのですが、切り取り~貼り付けを行って移動すると、起動しなくなります。 マクロの記録で記録した、ショートカットキーで起動するプロシージャのモジュール間での移動方法をお教え下さい。若しくは、指定するモジュールに上記プロシージャを記録する方法をお教え下さい。

  • マクロからFunctionプロシージャーを実行する

    マクロからFunctionプロシージャーを実行するには? 標準モジュールに Function アプリケーションのサイズを最大化する() DoCmd.RunCommand acCmdAppMaximize End Function があるのですが、 マクロからこれを実行したいのですが、見つかりませんと言う旨のエラーが発生します。 何が間違ってるのでしょうか? エラー番号は2482が表示されます。 ご回答よろしくお願いします。

  • VB.NETからVBAマクロ(引数)を呼び出す方法

      VB.NETから参照型引数付きのFunctionのVBAマクロを呼び出す方法 Excel2003のVBEの標準モジュールModule1にあるFunctionのマクロtest(引数)をVB.NETから呼び出して、引数に設定した値をVBA側で加工して、加工された値をVB.NETで取り出したいのですが、VB.NET側でどのように記述してよいのかがよく分かりません。 具体的には、以下のVBAをVB.NETから呼び出すにはどのように記述すればよいのでしょうか。できましたらそのままVB.NETのConsoleApplicationのModule1のSub Main()の中にコピーペーストして動くコードと参照設定を教えていただけると助かります。 ---Excel2003のVBA(C:\test\Book1.xls)---------- Function test(ByRef data As Long) As Long  If data = 0 Then   test = 0   data = 0  Else   test = 1   data = 100 / data  End If End Function ---------------------------------------------- よろしくお願いします(WindowsXP,VisualStudio2010,Excel2003VBE)  

専門家に質問してみよう