0
VBAの初心者ですが、VBAの使用を完了するための作業がありました。異なるワークブックの複数のワークシートのデータをコピーして別のワークブック(マスターデータファイル)に貼り付けるコードを、このマスターデータファイルに全く同じ数のワークシートを追加することによって作成するにはどうすればよいですか?つまり、私はマスターデータファイル内の別のワークシートにコピーされているすべてのワークシートを表示したいと思います。複数のワークブックからのワークシート・データのコピーとワークシートによるマスター・データ・ファイルへの貼り付け
データをコピーして1つのワークシートに貼り付けるコードを取り除くことができましたが、ワークシートを1つずつコピーして別のワークシートにコピーするのは苦労しています。
お手数をおかけします。
Sub datatransfer()
Dim FolderPath, FilePath, Filename, targetfile As String
Dim wb1, wb2 As Workbook
Dim i, mycount As Long
targetfile = "Left the location out on purpose"
FolderPath = " Left the location out on purpose "
FilePath = FolderPath & "*.xls*"
Filename = Dir(FilePath)
Dim lastrow, lastcolumn As Long
Do While Filename < ""
mycount = mycount + 1
Filename = Dir()
Set wb1 = Workbooks.Open(FolderPath & Filename)
lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
lastcolumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Range(Cells(2, 1), Cells(lastrow, lastcolumn)).Copy
Application.DisplayAlerts = False
Set wb2 = Workbooks.Open(targetfile)
Worksheets.Add Before:=Sheet1, Count:=2
For i = 1 To mycount
With Worksheets(i)
ActiveSheet.Paste Destination:=.Range(Cells(2, 2), Cells(2, lastcolumn))
End With
Next i
ActiveWorkbook.Close SaveChanges:=True
Filename = Dir
Loop
End Sub
スコット、ありがとうございます。 「wb2.Worksheets.Add After:wb.Worksheets.Count」ビットは、ファイル数に等しいワークシートを追加したいと考えていますか? "wb1.Worksheets.Count"として変更すると、ランタイムエラー91ウィンドウがポップアップします。 wb2はまだ初期化されていません。 データをコピーする各ファイルにはワークシートが1つのみ含まれているため、フォルダ内のファイル数は追加するワークシートの数になります。変更されたコードは、フォルダパス内のファイル数をどのように知っていますか?スコット、ありがとう。 – Richard
@リチャード - 最初に行は 'wb2.Worksheets.Add After:= wb2.Worksheets.Count'でなければなりません。構文エラーのため、申し訳ありません。 'wb2'はループが始まる前に初期化されるので、それは良いことです。私のコードは、パス内のファイルの数を探したり見つけたりすることはありませんが、ループが処理されるたびに、ループが各 'を通過するので、シート*(wb2.Worksheets.Add ...行)*を追加しません。 xls'ファイルをパスに追加すると、ファイルごとに新しいシートが追加されます。 –
'wb2'として初期化すると、実行時エラー1004が発生します。それはMS Office 2010です。既存の空白のワークシートがあっても、各シートを空白にコピーすることはありません。ソースデータを1つのワークシートにのみダンプします。ソースファイルがたくさんある場合でもすべてのオブジェクトを修飾することをお勧めしますか?私は、なぜ私が 'With'構造を考えているのかという理由で、ファイルのロードからデータをコピーする必要があるかもしれません。ありがとう、スコット。 – Richard