プロが教えるわが家の防犯対策術!

いつもお世話になります。
以下のようなVBAを作成しました。

sub test()
Sheets(Array("追加テンプレート", "入庫", "出庫", "在庫")).Select
Sheets("在庫").Activate
Sheets(Array("追加テンプレート", "入庫", "出庫", "在庫")).Copy
Sheets("在庫").Activate

ActiveWorkbook.SaveAs Filename:= _
"D:\" + CStr(Month(Date) + 1) + "月度在庫表",    FileFormat:=xlNormal,Password:="", WriteResPassword:="", ReadOnlyRecommended:=False,CreateBackup:=False
end sub

新しく作成したブックに標準モジュールとフォームが
コピーされません。
ほかにVBAの記述が必要かと思いますが、
本をひっくり返しても見つかりませんでした。

みなさま宜しくお願いいたします。

A 回答 (7件)

シートのコピーだけではVBAは保存されません。



ActiveWorkbook.SaveCopyAs
の1行で、開いているブックのコピーを保存出来ます。
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。
ブックごとコピーして保存すればいいのですね。
これがいちばん簡単かもしれません。

お礼日時:2006/11/16 09:09

KenKenSPさん、こんばんは。


いつも勉強させていただいています。

>知っておくと何かと VBA モジュールの操作は便利なコードですよ

仰るとおりです。
当方もたまーに遊び程度ですがそれらについては利用しています。
現在使用中のコードへの追加削除とか
コマンドボタンの追加消去に伴うイベントの追加削除等々。

それはそうとして、
今回のはKenKenSPさんの回答がどうのこうの
という意味で回答したわけではありませんので
その辺りのことはご理解いただければと思います。
これからも目から鱗の回答を期待しております。
 
    • good
    • 0

> VBAでモジュールやフォームをコピーしたいのですが、


というご要望のサンプルにはなってると思うので。

> これだけで十分目的は達せられると思うのですが・・・(^^;;;
その通りです...ね(^^; まあ、知っておくと何かと VBA モジュールの
操作は便利なコードですよ。
    • good
    • 0

sub test()



 ActiveWorkbook.SaveAs Filename:= "D:\" + CStr(Month(Date) + 1) + "月度在庫表"

End Sub

これだけで十分目的は達せられると思うのですが・・・(^^;;;
 
    • good
    • 0
この回答へのお礼

おっしゃるとおりです・・・

肝心なところが頭の中から抜けていて、
みなさまのお時間を取ってしまいました。

ご回答ありがとうございました。

お礼日時:2006/11/16 09:14

こんばんは。

KenKen_SP です。

下記サンプルは、VBA プロジェクトが保護されていると失敗します。また、
Excel2002 以上の場合は、
  [ツール]-[マクロ]-[セキュリティー]-[信頼のおける発行元]
において、
  [Visual Basic プロジェクトへのアクセスを信頼する]
にチェックを入れておく必要があります。

 # Wendy02 さんのアドイン化したらどうか...というのは私も同感です。

Sub Sample()

  Dim vShNames  As Variant
  Dim Wb     As Workbook
  Dim sMsg    As String
  Dim lRet    As Long
 
  vShNames = Array("追加テンプレート", "入庫", "出庫", "在庫")
  
  On Error Resume Next
  ThisWorkbook.Sheets(vShNames).Copy
 
  Set Wb = ActiveWorkbook
  Wb.Sheets("在庫").Activate
  lRet = CopyVBAModule(ThisWorkbook, Wb)
  If lRet = 0 Then
    MsgBox "モジュールのコピー中にエラーが発生しました" & vbLf _
       & "全てまたは一部のモジュールがコピーされてません", vbCritical
  End If
  Wb.SaveAs Filename:="D:\" & CStr(Month(Date) + 1) & "月度在庫表.xls"
  Set Wb = Nothing

End Sub

' // VBA モジュール(シートモジュール除く)を他ブックへコピーします
Private Function CopyVBAModule( _
  ByVal WbSrc As Workbook, _
  ByVal WbDst As Workbook _
) As Long
 
  ' 引 数:WbSrc コピー元ワークブック オブジェクト
  ' 引 数:WbDst コピー先ワークブック オブジェクト
  ' 戻り値:成功 コピーしたモジュールの数 失敗 0

  Dim sPath  As String
  Dim sFile  As String
  Dim sCode  As String
  Dim VBC   As Object ' VBComponent
  Dim lCount As Long

INIT:
  sPath = WbSrc.Path
  If sPath = "" Then sPath = Environ("tmp")
MAIN:
  On Error GoTo ERROR_COPYMODULE
  For Each VBC In WbSrc.VBProject.VBComponents
    Select Case VBC.Type
      Case 1 To 3: ' 1:Module 2:Class 3:Form -----------------------------
        sFile = sPath & "\" & VBC.Name
        ' Export Module
        VBC.Export Filename:=sFile
        ' Import Module
        WbDst.VBProject.VBComponents.Import Filename:=sFile
        ' Delete Exported Module File
        Kill VBC.Name
        If VBC.Type = 3 Then
          Kill VBC.Name & ".frx"
        End If
        lCount = lCount + 1
      Case 100: ' 100:Sheet or ThisWorkbook ------------------------------
        If VBC.Name = "ThisWorkbook" Then
          With WbSrc.VBProject.VBComponents("ThisWorkbook").CodeModule
            sCode = .Lines(1, .CountOfLines)
          End With
          With WbDst.VBProject.VBComponents("ThisWorkbook").CodeModule
            .DeleteLines 1, .CountOfLines
            .InsertLines 1, sCode
          End With
          lCount = lCount + 1
        End If
    End Select
  Next
TERMINATE:
  On Error GoTo 0
  CopyVBAModule = lCount
  Exit Function
ERROR_COPYMODULE:
  CopyVBAModule = 0
End Function
    • good
    • 1
この回答へのお礼

>VBA プロジェクトが保護されていると失敗します。
ネットで巡回していても
VBAプロジェクトを使用するコードがあったのですが、
ことごとく、失敗してしまっていました。

原因がわかったと同時に
すばらしいコードをありがとうございます。

今回はシンプルにブックごとコピーして
目的を達成したいと思います。

ありがとうございました。

お礼日時:2006/11/16 09:13

こんばんは。



VBAで、Module も UserFomr もコピーは出来ますが、
ただ、ざっと見たかんじ、次の月に使うという内容のようです。

>"D:\" + CStr(Month(Date) + 1) + "月度在庫表"

もし必要なら、そのマクロを、別のブックに移して、そのブックをアドイン形式にすればよいのではありませんか?同じマクロをコピーして、次の月に使う必要性はないと思います。ただ、アドインは、ThisWorkbook ではありませんから、ActiveWorkbook などとして書き換えなくてはなりません。
    • good
    • 0

表示されているなら左上に一覧(プロジェクトエクスプローラ)があると思いますが


ここでフォームやモジュールを選択して右クリックで
エクスポートを選択して保存してください。

新しいブックでは「挿入」「モジュール」、「挿入」「フォーム」でインポートしてください。

各シート固有のVBAはコピーして貼り付けですね。

面倒なら不要なデータを削除したブックを、名前を付けて保存でテンプレートとして保存してください。
「ファイル」「新規作成」のダイアログで選択できます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

VBAでモジュールやフォームをコピーしたいのですが、
難しいのでしょうか?

お礼日時:2006/11/15 16:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A