VBA ひな型を壊さないようにするには?(ひな型の形を変える処理がある場合)
こんにちは。
派犬事務員のコロ子です。
前回からの続き
koroko.hatenablog.com
で、
「転記の処理の途中で、行を削除したり、列を追加したり、ひな型の形を変更する処理がある場合はどーするの?」
ですよね?
この場合は、さらに作業用のシートを用意するので、ちょっとややこしい。
① ひな型をコピーする(作業ブック)
② 作業ブックを開く
③ リストデータの数だけループ
【ループの中で】
③-1 作業ブックのひな型シートをコピーする(作業シート)
③-2 作業シートを処理
③-3 作業シートを名前を付けて保存する
③-4 作業シートを削除する
④ 作業ブックを閉じる
⑤ 作業ブックを削除
リストデータの数だけ、シートをコピーしたり、削除したりするので、ちょっと重い処理になる。もっと良い方法があるのかもしれないけど、ひとまずコードを書いてみた。
Sub 注文書作成_3() Application.ScreenUpdating = False '作業用ブックの名前は「作業用年月日時分秒.xlsx」にする Dim tmp As String tmp = "\作業用" & Format(Now, "yyyyddmmhhnnss") & ".xlsx" '注文書ひな型をコピーして作業ブックを作成する FileCopy ThisWorkbook.Path & "\注文書ひな型.xlsx", ThisWorkbook.Path & tmp Dim wb As Workbook Dim ws As Worksheet '作業用ブックを開く Set wb = Workbooks.Open(ThisWorkbook.Path & tmp) Dim i As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row 'ひな型シートを別シートにコピーする。 wb.Worksheets("ひな型").Copy After:=Worksheets("ひな型") Set ws = ActiveSheet Dim strName As String strName = Cells(i, 2).Value '途中ポイントごとに作業ブックを保存する wb.Save 'リストのデータを作業用ブックに転記 ws.Range("C5").Value = strName '名前 ws.Range("C10").Value = Cells(i, 1).Value '日付 ws.Range("D10").Value = Cells(i, 3).Value '品名 ws.Range("E10").Value = Cells(i, 4).Value '金額 '行を削除する処理とか ws.Rows("12:20").Delete 'wsシートを別ブックにコピー ws.Copy '名前を付けて保存 ActiveSheet.Parent.SaveAs ThisWorkbook.Path & "\領収書(" & strName & ").xlsx" '閉じる ActiveSheet.Parent.Close 'wsを削除 ws.Delete Next i '作業用ブックを閉じる wb.Close SaveChanges:=False '作業ブックを削除 Kill ThisWorkbook.Path & tmp Application.ScreenUpdating = True End Sub