- ベストアンサー
Excel2007VBAでUserFormやModule1をコピーする方法
- Excel2007VBAを使用して、最初のブックからAddメソッドを使って新規ブックを立ち上げる際に、UserFormやModule1のコードをコピーすることは可能ですか?必要なプロパティ、メソッド、関数などを教えてください。
- Excel2007VBAでワークシート上にタイムカードを作成するため、最初の雛形から1ヶ月目のタイムカードを新規ブックとして立ち上げ、その後も月ごとに新しいブックを立ち上げていく予定です。質問のポイントは、新しいブックを立ち上げる際にUserFormやModule1のコードをコピーすることが可能かどうかです。
- 最初のブックからAddメソッドを使って新しいブックを立ち上げる際に、Excel2007VBAでUserFormやModule1のコードをコピーする方法を教えてください。新しいブックには予めプログラミングしてある年月名や個人名が入力されるようにしています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#2です 横から失礼させていただきますが、コードを操作するVBAは当方も試しにやってみた事がありますが、当該ファイルに対し、セキュリティソフトが毎回警告を出してくれます。要するにマクロウィルス扱いです。家で試しにやってみるのはともかく、ビジネスで使おうとは思わない方が良いです。システム部門からお目玉を食らうと存じます。 ということを前提に代替案を提案させていただいております。
その他の回答 (3)
- masa_019
- ベストアンサー率61% (121/197)
こんにちは。 >最初のブックからAddメソッドを使って新規ブックを >立ち上げたときに、最初のブックのUserFormやModule1を >コピーすることは可能でしょうか? 同じマクロを持ったブックをいくつも増殖させるような仕様は どうかと思いますけど、可能か可能でないかと言うことであれば可能です。 VBComponentsのExport、Importメソッドを使います。 最初のブックにはUserForm1とModule1があるものとして、 Module1に以下のコードを記述して実行。 Sub sample() Dim wb As Workbook Dim idx As Long Set wb = Workbooks.Add idx = Application.VBE.VBProjects.Count With ThisWorkbook.VBProject .VBComponents("UserForm1").Export ThisWorkbook.Path & "\UserForm1.frm" .VBComponents("Module1").Export ThisWorkbook.Path & "\Module1.bas" End With With wb.Application.VBE .VBProjects(idx).VBComponents.Import ThisWorkbook.Path & "\UserForm1.frm" .VBProjects(idx).VBComponents.Import ThisWorkbook.Path & "\Module1.bas" End With End Sub
お礼
masa_019様 ご回答ありがとうございます。 またお礼が遅くなり誠に恐縮ですが、 お時間がございましたら、補足質問の方も ご確認いただければ幸いです。
補足
コードのアドバイスありがとうございます。 上記コードを入力し実行しようとすると、 「実行時エラー1004 プログラミングによるVisualBasicプロジェクトへの アクセスはは信頼性に欠けます」と表示されます。 microsoftのサポート説明でこのエラーが表示されないように するためには、下記のアドレスに記載されていますが、 その分考えなければならない「リスク」は何でしょうか? もしご存知であればご教示願います。 http://support.microsoft.com/kb/813969/ja
- mitarashi
- ベストアンサー率59% (574/965)
二案提案いたします 1.テンプレート形式でひな形を保存しておく案(図参照) ひな形ファイルにはUserFormとModuleを組み込んでおく。 また、下記の様なコードを組み込み、テンプレートからの次月ファイル作成と今月からの必要データの転記を実行する。 Sub test() Dim newWbk As Workbook Set newWbk = Workbooks.Add(Template:="C:\Documents and Settings\????\Application Data\Microsoft\Templates\book1.xlt") '前月ブックから次月ブックへの必要データ転記を記述 newWbk.Worksheets("Sheet1").Range("A1").Value = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value End Sub 2.データを保存するブックには、UserFormもModuleも持たせない案。 UserFormと、Module1がアクティブシートを処理する様に記述すれば、アクティブシートの属するブックに所属する必要はまったくありません。たとえば個人用マクロブックにUserFormと、Module1を持たせておけば、全てのブックから使えます。 実行は個人的には右クリックメニューに登録するのがお勧めです(記憶力が悪いもので)が、ショートカットに登録しておくことも可能です。他の同僚等にも使ってもらう場合は、アドインにする事をお勧めします。リンク先は簡単なアドインの作成例です。 http://okwave.jp/qa/q6926261.html
お礼
mitarashi様 ご回答ありがとうございます。 またお礼が遅くなり申し訳ございません。 2つも提案をしてくださいまして ありがとうございます。 テンプレート形式でひな型を保存しておく ことについて考えていませんでした。 参考にさせていただきます。
- temtecomai2
- ベストアンサー率61% (656/1071)
ひな形ファイルと、ひな形ファイルを複製する機能のファイルは別にしておけばいいのに。 とりあえず Excel VBA には FileCopy という機能がある。 FileCopy "オリジナルファイルのパス", "複製後のファイルパス" しかしここでコピーしようとしている "オリジナルファイル" が、このコードを実行しようとしているファイルなのでこれは失敗する。 FileSystemObject の CopyFile メソッドなら成功した。 Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") fso.CopyFile "オリジナルファイルのパス", "複製後のファイルパス"
お礼
temtecomai2 ご回答ありがとうございます。 またお礼が遅くなり申し訳ございません。 temtecomai2様がアドバイスしてくださった CopyFile メソッドを用いてみると ModuleもUserFormもコピーすることができました。 助かりました。
お礼
mitarashi様 たびたびのアドバイスありがとうございます。 仕事の省力化のひとつとして 会社のパソコンで試そうとしてました(笑) 小さい会社なだけにお目玉だけでは すまなかったかもしれません! 事前にお知らせいただきありがとうございました。