VBA超初心者です。
調べながら時間をかけてコードを作りました。
簡単なコードだと思いますが、動いたことに喜びを感じています。
以下は作成したコードです
Option Explicit Sub 印刷と保存() Dim i Dim filename As String '保存先フォルダパスとファイル名 Dim filename2 Dim na Dim name As String '保存ファイル名 Dim name2 Dim insatsu As Long Dim save As Long Dim folder If Range("j5") = 0 Then MsgBox ("処理番号が空白です。一覧を確認してください") Worksheets("一覧").Select Exit Sub End If ''請求書の振込先を入力 'If Range("A4") = "御請求書" Then ' Worksheets("振込先").Select ' activesheets.Shapes.Copy ' Worksheets("振込先").Select ' activesheets.Paste ' Selection.Top 'ファイル名を作成 na = Range("g5") & "_" & Range("b7") name = Range("g5") & "_" & Range("b7") & ".pdf" name2 = Range("g5") & "_" & Range("b7") & ".xlsx" 'パスを作成(フォルダ、PDF、エクセル) folder = ThisWorkbook.Path & "\" & "保存" filename = ThisWorkbook.Path & "\" & "保存" & "\" & name filename2 = ThisWorkbook.Path & "\" & "保存" & "\" & name2 If Dir(folder, vbDirectory) = "" Then MkDir folder End If If Dir(filename) <> "" Then save = MsgBox("既に" & na & "は存在します。上書き保存しますか?", vbYesNo, "確認") If save = vbNo Then MsgBox ("何もせず終了します") Exit Sub End If Application.DisplayAlerts = False Application.DisplayAlerts = True insatsu = MsgBox("上書き保存した「" & name & "」を印刷しますか?", vbYesNo, "確認") If insatsu = 6 Then Range("h6").Interior.ColorIndex = 0 '塗りつぶしをクリアに With ActiveSheet.PageSetup '1ページに収まるように印刷 .Orientation = xlPortrait .Zoom = False .FitToPagesTall = 1 .FitToPagesWide = 1 End With With ActiveSheet .PrintOut Preview:=True .ExportAsFixedFormat Type:=xlTypePDF, filename:=filename 'PDFに変換 .Range("h6").Interior.Color = RGB(255, 255, 0) '塗りつぶしを黄色に(元通りに) .Copy End With ActiveWorkbook.SaveAs filename2 ActiveSheet.Range("a1:h46").Value = ActiveSheet.Range("a1:h46").Value ActiveSheet.Range("h6").Interior.ColorIndex = 0 ActiveSheet.Columns("i:m").Delete Sheets(1).name = Range("G5") ActiveWorkbook.Close Else With ActiveSheet .ExportAsFixedFormat Type:=xlTypePDF, filename:=filename 'PDFに変換 .Range("h6").Interior.Color = RGB(255, 255, 0) '塗りつぶしを黄色に(元通りに) .Copy End With ActiveWorkbook.SaveAs filename2 ActiveSheet.Range("a1:h46").Value = ActiveSheet.Range("a1:h46").Value ActiveSheet.Range("h6").Interior.ColorIndex = 0 ActiveSheet.Columns("i:m").Delete Sheets(1).name = Range("G5") ActiveWorkbook.Close End If Exit Sub Else Range("h6").Interior.ColorIndex = 0 '塗りつぶしをクリアに With ActiveSheet.PageSetup '1ページに収まるように印刷 .Orientation = xlPortrait .Zoom = False .FitToPagesTall = 1 .FitToPagesWide = 1 End With With ActiveSheet .PrintOut Preview:=True .ExportAsFixedFormat Type:=xlTypePDF, filename:=filename 'PDFに変換 .Range("h6").Interior.Color = RGB(255, 255, 0) '塗りつぶしを黄色に(元通りに) .Copy End With ActiveWorkbook.SaveAs filename2 ActiveSheet.Range("a1:h46").Value = ActiveSheet.Range("a1:h46").Value ActiveSheet.Range("h6").Interior.ColorIndex = 0 ActiveSheet.Columns("i:m").Delete Sheets(1).name = Range("G5") ActiveWorkbook.Close End If End Sub
この中に、
同じプログラムコードを何度も使いまわしている
部分があります。
ActiveWorkbook.SaveAs filename2 ActiveSheet.Range("a1:h46").Value = ActiveSheet.Range("a1:h46").Value ActiveSheet.Range("h6").Interior.ColorIndex = 0 ActiveSheet.Columns("i:m").Delete Sheets(1).name = Range("G5") ActiveWorkbook.Close
現在は、その部分をコピーして、必要なところにペーストして使いまわしています。
ただ、修正が必要になった時も同じように全てをコピー&ペーストしなければいけないので、
効率が悪いのと修正を忘れる可能性があるので、一か所を修正したら全て反映されるような
方法があるのでは?と思いました。
ネットで調べようと思いましたが、どのような単語で調べてよいのかわからず、
ご質問させていただきました。
回答3件
あなたの回答
tips
プレビュー