Excel2007VBAでUserFormやModule1をコピーする方法

このQ&Aのポイント
  • Excel2007VBAを使用して、最初のブックからAddメソッドを使って新規ブックを立ち上げる際に、UserFormやModule1のコードをコピーすることは可能ですか?必要なプロパティ、メソッド、関数などを教えてください。
  • Excel2007VBAでワークシート上にタイムカードを作成するため、最初の雛形から1ヶ月目のタイムカードを新規ブックとして立ち上げ、その後も月ごとに新しいブックを立ち上げていく予定です。質問のポイントは、新しいブックを立ち上げる際にUserFormやModule1のコードをコピーすることが可能かどうかです。
  • 最初のブックからAddメソッドを使って新しいブックを立ち上げる際に、Excel2007VBAでUserFormやModule1のコードをコピーする方法を教えてください。新しいブックには予めプログラミングしてある年月名や個人名が入力されるようにしています。
回答を見る
  • ベストアンサー

UserFormとModule1のコピー

●質問の主旨 Excel2007VBAを使用しています。 最初のブックからAddメソッドを使って新規ブックを 立ち上げたときに、最初のブックのUserFormやModule1を コピーすることは可能でしょうか? また可能であればプロパティ、メソッド、関数などを どのような方法を使用するのでしょうか? ご存知の方ご教示とよろしくお願い申し上げます。 ●質問の補足 「タイムカード」の雛形から年月名と個人名が記載された タイムカードをワークシート上に作成しようと考えています。 まず添付の画像のように最初の雛形から1ヶ月目の 「タイムカード」を新規ブックとして立ち上げます。 次に1ヶ月目の「タイムカード」から2ヶ月目の 「タイムカード」をまた新規ブックとして立ち上げます。 以降の月はその繰り返しです。 質問のポイントは1月ごとに新規ブックを立ち上げる際に UserFormやModule1のコードをコピーすることが可能であるかどうか ということです。 ※新規ブックやワークシートには予め年月名や個人名が 入力されるように最初のブックにプログラミングしている こととします。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#2です 横から失礼させていただきますが、コードを操作するVBAは当方も試しにやってみた事がありますが、当該ファイルに対し、セキュリティソフトが毎回警告を出してくれます。要するにマクロウィルス扱いです。家で試しにやってみるのはともかく、ビジネスで使おうとは思わない方が良いです。システム部門からお目玉を食らうと存じます。 ということを前提に代替案を提案させていただいております。

dradra33
質問者

お礼

mitarashi様 たびたびのアドバイスありがとうございます。 仕事の省力化のひとつとして 会社のパソコンで試そうとしてました(笑) 小さい会社なだけにお目玉だけでは すまなかったかもしれません! 事前にお知らせいただきありがとうございました。

その他の回答 (3)

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.3

こんにちは。 >最初のブックから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

dradra33
質問者

お礼

masa_019様 ご回答ありがとうございます。 またお礼が遅くなり誠に恐縮ですが、 お時間がございましたら、補足質問の方も ご確認いただければ幸いです。

dradra33
質問者

補足

コードのアドバイスありがとうございます。 上記コードを入力し実行しようとすると、 「実行時エラー1004 プログラミングによるVisualBasicプロジェクトへの アクセスはは信頼性に欠けます」と表示されます。 microsoftのサポート説明でこのエラーが表示されないように するためには、下記のアドレスに記載されていますが、 その分考えなければならない「リスク」は何でしょうか? もしご存知であればご教示願います。 http://support.microsoft.com/kb/813969/ja

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

二案提案いたします 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

dradra33
質問者

お礼

mitarashi様 ご回答ありがとうございます。 またお礼が遅くなり申し訳ございません。 2つも提案をしてくださいまして ありがとうございます。 テンプレート形式でひな型を保存しておく ことについて考えていませんでした。 参考にさせていただきます。

回答No.1

ひな形ファイルと、ひな形ファイルを複製する機能のファイルは別にしておけばいいのに。 とりあえず Excel VBA には FileCopy という機能がある。 FileCopy "オリジナルファイルのパス", "複製後のファイルパス" しかしここでコピーしようとしている "オリジナルファイル" が、このコードを実行しようとしているファイルなのでこれは失敗する。 FileSystemObject の CopyFile メソッドなら成功した。 Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") fso.CopyFile "オリジナルファイルのパス", "複製後のファイルパス"

dradra33
質問者

お礼

temtecomai2 ご回答ありがとうございます。 またお礼が遅くなり申し訳ございません。 temtecomai2様がアドバイスしてくださった CopyFile メソッドを用いてみると ModuleもUserFormもコピーすることができました。 助かりました。

関連するQ&A

  • Excel2007VBAsheet1のコードコピー

    ●質問の主旨 雛形のブックから新規ブックを立ち上げます。 雛型のブックのsheet1にはコードが記述されています。 そのコードを新規ブックに「コピー」して使うことは できるでしょうか? またできるとすればどうのような方法があるでしょうか? ご存知の方ご教示よろしく願います。 ●質問の補足 現在、タイムカードを作成しています。 最初にタイムカードの雛形を作成しておき、 Addメソッドを使用することによって新規ブックを立ち上げます。 その新規ブックについて、月日・曜日・罫線の描画のほかに、 ワークシートを右クリックすることによって 出勤退勤の打刻ができるようにしたいと考えております。 雛型の方にはすでに出勤退勤の打刻ができるコードを作成しています。 新規ブックを立ち上げるたびにこのコードをコピーできるように したいと考えております。

  • ワークシートの印刷設定をコピーする。

    ワークシートの印刷設定をコピーする。 雛形シートのコピーを新しいシートにペーストするマクロを組んでいます。 雛形シートで  Cells.Copy 新しいシートで  Selection.Paste これで一応、コピー&ペーストできますが、印刷設定がまるで移植されていないので、  dim PS as PageSetUp として、雛形シートで  Set PS=ActiveSheet.PageSetUp 新しいシートで  Set ActiveSheet.PageSetUp=PS としたのですが、  実行時エラー '438':  オブジェクトは、このプロパティまたはメソッドをサポートしていません。 となりました。  Set ActiveSheet.PageSetup=PS というコードをどう改めたら良いのか分かりません。 あるいはもっと簡単な方法があったらご教授ください。

  • EXCEL VBA ワークシートのコピーについて

    seaclearsky8です。 一つのブックに何枚ものワークシートを追加して保存するVBAについて ご教授、よろしくお願いします。 コピー元  MASTER Book MASTER Workseets コピー先 Copy Book copy Worksheets コピー元にはワークシートがMASTERワークシートの一枚しかありません。 その一枚のワークシートに値をVBAで入れていき処理し コピー先のコピーBOOKにワークシートをコピーしていきたいです。 しかし、MASTERBOOKの処理が何通りかあり、 コピー元の一枚のワークシートに 処理別にデータを写し コピー先BOOKに          ワークシート名 ワークシート1 処理1ワークシート  ワークシート2 処理2ワークシート ワークシート3 処理3コピー元ワークシート3 という具合にワークシートを複数コピーしたいのですが 処理ごとにデータを代入し、コピー処理はできるのですが。 コピー先BOOK ワークシート3 処理3ワークシート だけしかコピーされてないBOOKが作成されます。 上書きされているのだと思われます。 対処法が調べましたが見つけられていません。 すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

  • EXCEL VBA ワークシートのコピーについて

    seaclearsky8です。 一つのブックに何枚ものワークシートを追加して保存するVBAについて ご教授、よろしくお願いします。 コピー元  MASTER Book MASTER Workseets コピー先 Copy Book copy Worksheets コピー元にはワークシートがMASTERワークシートの一枚しかありません。 その一枚のワークシートに値をVBAで入れていき処理し コピー先のコピーBOOKにワークシートをコピーしていきたいです。 しかし、MASTERBOOKの処理が何通りかあり、 コピー元の一枚のワークシートに 処理別にデータを写し コピー先BOOKに          ワークシート名 ワークシート1 処理1ワークシート  ワークシート2 処理2ワークシート ワークシート3 処理3ワークシート という具合にワークシートを複数コピーしたいのですが 処理ごとにデータを代入し、コピー処理はできるのですが。 コピー先BOOK ワークシート3 処理3ワークシート だけしかコピーされてないBOOKが作成されます。 上書きされているのだと思われます。 対処法が調べましたが見つけられていません。 すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

  • エクセルVBA シート追加に伴うシート名入力

    宜しくお願いします。 勤怠管理(タイムカード)の表の扱いに伴って,合理的にしてみたいと思いました。 一番左シートが入力シート(名前/時給など)になっており,それから右のシートが各個人タイムカードになってます(タイムカードの雛形のコピーをしながら増やしていた)。 入力シートに「名前」を追加すると雛形シートが追加になり(シート名が「名前」),また入力シートの「名前」を消すとそのシートがなくなるようなものがあると助かります。 単純なシート追加とかは組めるのですが,それ以上になるとチンプンカンプンで...。

  • エクセル UserForm 呼び出しでフリーズしてしまいます

    エクセルでタイムカード?退勤時間管理表を作成しています。 UserFormの使用は初めてです・・・ UserForm1が「出勤」「退勤」「休憩入り・戻り」などをボタンで作って入力させるのはうまくいきました。 ところが、UserForm2に、各従業員のタイムカード(出勤退勤休憩を記録しているシート部分)を表示したくなったのでUserForm2に、ListBox1を貼り付けてマクロでRowSourceを書き換えて表示させたかったのですが・・・ 作成中はうまく表示しているのですが、実際にUserForm2.Showとやって呼び出すとUserForm2は表示されるのですが、エクセルすべてが全く反応なくなってしまいます。UserForm2も閉じれません。 ListBox1でいじったプロパティは、RowSourceとColumnCountのみです。 RowSourceは、'名 前'!A1:H32 ColumnCountは、8 UserForm2には、ListBox1しかありません。 UserForm1にも、ListBoxはあるのですが全く問題なしです。(1行のみのものですが) 時計のリアルタイム表示マクロやUserFormに最小化ボタンを付けるマクロを付けていたのでそれが原因かとも思い削除してみたのですが、UserForm2を表示するとフリーズしてしまいます。 何が原因のでしょうか? 教えてください。よろしくお願いします。 エクセルは、2007です。

  • エクセル2000のコピーについて

    エクセルについての質問です。 表をコピー・貼り付けするときに列幅や行幅は表と同じにはできないのですか? それと、bookごとコピーして新しいbookに貼り付けはできないのですか? 今はワークシートを1枚づつコピーし新しいbookに貼り付けているのですが、量が多いので・・

  • エクセルのシートをコピーしたら

    一つのブック内で同じ形式のシートをコピーして複数作りました。 具体的には月報の用紙をひな形を作ってコピーしたのですが、どのシートに入力しても全部のシートに反映されてしまいます。 これを解消するにはどうすればよいのでしょうか? エクセル2007で2003形式で保存してあります。

  • エクセルのマクロが7回目でエラーになる。シートコピーでエラー発生。

    エクセルマクロで【ファイルA】に【マクロ表示】を作成。 内容:【ファイルA】は4シート(シート名:【チャート】【ひな型】【データ】【メニュー】)。 (1)【メニュー】にあるリストから「地域A」を選択 (2)他のブックを開き「地域A」のデータをコピー、【データ】に貼り付け。20のブックからデータを貼り付ける。 (3)【チャート】【ひな型】には、グラフがある。 元のデータは【データ】にあるので、「地域A」のデータがコピーされた時点でグラフは出来る。 (4)【チャート】、【ひな型】をコピーする。 (5)【データ】で作表し、【ひな型(2)】【チャート(2)】に貼り付ける。 (6)【チャート(2)】、【ひな型(2)】を新しいブックに移動。 新しい名前【Book1】で保存。リンクを切り上書きする。 (7)【マクロ表示】は終了し、【メニュー】に戻る。 画面は【Book1】【ひな型(2)】で終わる。 (8)【Book1】を閉じる。 【ファイルA】【メニュー】から「地域B」を選択。【マクロ表示】を実行。 以上の手順で、【ファイルA】を閉じることなく、「地域A」「地域B」・・と選択して、【マクロ表示】を実行していくと、 7回目で(4)でエラーになってしまう。 Worksheets("ひな型").copy before:=worksheets(1)の行で。 エラーメッセージは「実行時エラー1004 WorksheetクラスのCopyメソッドが失敗」。 【ファイルA】のシートを右クリックでを見てみると、 「シートの移動またはコピー」の「移動先ブック名」が(新しいブック)、挿入先が空になっています。 通常、「移動先ブック名」は現在のブック名【ファイルA】、 挿入先【メニュー】【データ】【ひな型】【チャート】であると思うのですが。 シートのコピー回数に制限でもあるのでしょうか? マクロで回避が出来る方法があればお教え下さい。 次のリストを選択前に毎回【ファイルA】を閉じる以外無いのでしょうか? よろしく御指導下さい。

  • VBA_UserFormの初期値

    毎度お世話になっております。 UserFormを開いた時に、UserForm内にあるTextBoxに初期値として 文字を入れたいのですが、表示されません。 原因が判りません。判りましたらご教授お願いします。 プロジェクトの状況 ワークシート3枚(内コード有1枚 シート名:表紙) フォーム2つ(フォーム名:UF1・UF2) 表紙にあるAボタンを押したらUF1が開くBでUF2が開くようなマクロです。 シート"表紙"コード Private Sub CommandButtonA_Click() UF1.show End Sub UF1(コード) Private Sub UF1_Initialize() TextBox.Value="文字" End Sub "文字"をUF1フォーム内に最初から出したいと考えてます。 宜しくお願いします。