派遣事務員の迷走

派遣事務員コロ子。会社の犬。顔出しNG。常に迷走している。

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