- ベストアンサー
ExcelVBAでモジュールシートの内容更新を自動で行いたい
Excelで、ファイルを開いたときに、そのファイルのモジュールシートの内容を自動的に更新するVBAを書きたいのです。 gooで質問しながらも、とりあえず自分で以下のように作ってみました。どのような方法にしたかというと、Auto_Openでファイルを開いたときに、まず対象となる更新前のモジュールシートを削除(更新前が存在しない場合はエラーになるのでOnErrorGotoで回避)し、その後、あらかじめ更新後の内容を記述しておいたC:\定義.txtというファイルを更新後のモジュールシートとして付け加えるというものです。 とりあえずはうまく内容更新できたのですが、ファイルを開いた際に自動的同時に開かれるBook1.xlsなどのファイルにも更新後のモジュールシートが付け加わってしまうのです。つまり、更新させたいファイルだけでなく、その他のファイルも更新の対象となってしまう場合があるのです。 いろいろ試してみると、すでにExcelを立ち上げた状態で当ファイルを開いた場合は、それ以前に開いていたファイルが更新対象になることはないようです。Excelを立ち上げていない状態からエクスプローラなどで当ファイルを開き、同時に自動的にExcelやBook1などのファイルも立ち上がる際に、Book1なども更新対象となってしまうようです。 更新させたいファイルのモジュールシートだけを更新するには、どのようにVBAを書いたらいいのか、ヒントくらいでも結構ですのでご教授ください。 Sub Auto_Open() 削除 追加 End Sub Sub 追加() With Application.VBE.ActiveVBProject.VBComponents.Add(vbext_ct_StdModule) .Name = "定義" .CodeModule.AddFromFile ("C:\定義.txt") End With End Sub Sub 削除() On Error goto trap Application.VBE.ActiveVBProject.VBComponents.Remove _ Application.VBE.ActiveVBProject.VBComponents("定義") Trap: End Sub
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ファイル名やVBProject名を利用して、処理分岐させてはどうでしょうか? VBProject名は Application.VBE.ActiveVBProject.Name ファイル名は VBProject名ActiveWorkbook.Name で取得できますので、処理対象のファイルに特定の名前かVBProject名を設定し、それ以外は処理対象外にすると言う感じで… if Application.VBE.ActiveVBProject.Name<>"MyVBProject" then exit sub とか if ActiveWorkbook.Name<>"MyVBAfile.xls" then exit sub
その他の回答 (1)
- papayuka
- ベストアンサー率45% (1388/3066)
こんにちは。 もっと良い方法があるかも知れませんが、プロジェクト名を任意の物にして判定するとか。 予め「TestProject」にして Sub Auto_Open() 置換 End Sub Sub 置換() Dim vbc With Application.VBE.ActiveVBProject If .Name = "TestProject" Then For Each vbc In .VBComponents If vbc.Name = "定義" Then .VBComponents.Remove (vbc) Exit For End If Next vbc Set vbc = .VBComponents.Add(vbext_ct_StdModule) vbc.Name = "定義" vbc.CodeModule.AddFromFile ("C:\定義.txt") End If End With End Sub なぜこの様な処理が必要なのでしょう? 興味あります。
お礼
ありがとうございました。 実は、指定した日付から銀行営業日(土日祝や年末年始を除く日)で3営業日後とか5営業日後とかの日付を返すFunction関数を作ったのですが、春分の日や秋分の日は他の祝日とは違い、確定した日付ではなく、毎年、官庁から公表される日付が適用されるため、Function関数自体を少し直す必要があるのです。(もっと良い方法があるのかも知れませんが…) この関数自体をたくさんのファイルで使っているため、いちいち全てのファイルを修正するのがメンドクサイため、このような方法を行っています。 またよろしくお願いします。
お礼
ありがとうございました。うまくいきました。