Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Pro : Microsoft 365)
同じシートの中に2つの範囲があってそれぞれの範囲を同じフォルダにPDF保存する2つのマクロを作りたい
投稿日時: 24/08/17 07:55:30
投稿者: シナモンジンジャー

同じシートの中に「見積依頼」の範囲と「発注書発行」の範囲があって、見積依頼の範囲(B2:N245)をPDFにして保存するマクロと発注書発行の範囲(P2:AB245)をPDFにして保存するマクロを作りたいです。この範囲は商品名,
規格、メーカー、納入先、個数が同じなので、横並びになっていますが、Column方向の項目名が若干違います。
この2つの範囲のpdf範囲の指定方法とエクセルシートを保存している同じフォルダにPDF保存する方法が分かりません。「マクロの記録」をすると、同じフォルダなのにChdirが出てきます。シンプルで分かりやすいマクロができたらありがたいです。ご教示よろしくお願いします。

回答
投稿日時: 24/08/17 15:18:38
投稿者: simple

・印刷範囲の設定
・(必要なら)横を1ページにするような印刷設定の指定
・PDFのExport
で作成できると思います。
これらの動作をマクロ記録されたのであれば、それを示してください。
どちらかひとつの範囲で結構です。
それをもとに、どこに詰まっているのか具体的に記載してください。

投稿日時: 24/08/17 17:21:31
投稿者: シナモンジンジャー

下は、マクロの記録で作成したものですが、実際は同じブックの中に提示したシートが、数種類あるのでファイル名は、Stringを使ってセルのValueから代入したいのです。なのでどのシートにも汎用して使えるようにしたいです。
 
Sub 見積依頼書()
'
' 見積依頼書 Macro
'
    Range("B2:N245").Select
    ActiveSheet.PageSetup.PrintArea = "B2:N245"
    ChDir "C:\Users\rsu46\OneDrive\ドキュメント\01マイデータ"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\rsu46\OneDrive\ドキュメント\01マイデータ\見積依頼書.pdf", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False,OpenAfterPublish:=True
         
End Sub
よろしくお願いします。

回答
投稿日時: 24/08/17 18:33:45
投稿者: simple

・PDFの保存先フォルダは、マクロを書いたブックの保存先と同じ
・対象セル範囲は、どのシートも共通
・アクティブシートに対して処理を行い、
・そのシートの B1セルとP1セルにPDFファイル名を書いておく
ものとすると、以下のようなことになるでしょう。
微修正が必要ならそちらで実行して下さい。
 

Option Explicit
Dim pathName As String

Sub test()
    pathName = ThisWorkbook.Path
    Call writePDF("B2:N245", [B1])
    Call writePDF("P2:AB245", [P1])
End Sub

Sub writePDF(adrs As String, fname As String)
    ActiveSheet.PageSetup.PrintArea = adrs
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=pathName & "\" & fname, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=True
End Sub

なお、[B1] は Range("B1")と書くのと同じです。
もちろん、すべてのシートに対して繰り返し処理を行うこともできるでしょう。トライしてみてください。

投稿日時: 24/08/17 20:11:39
投稿者: シナモンジンジャー

ありがとうございます。
勤務先のパソコンはセキュリティのため一切、外部からのメール添付やUSBメモリ取り込みのできない環境なので、モーグに入っているこのパソコンで作成したマクロを試すことができません。今度出勤したときに、作成していただいたコードを手打ちで入力して試してみます。
 見積依頼書のある Call writePDF("B2:N245", [B1]) の出力時期と
 発注書発行のある Call writePDF("P2:AB245", [P1]) の出力時期にはタイムラグがあるので、マクロのボタンは別々に2つ作りたいと思います。
これまで、ネットで調べたコードとは全く違うコードですので、すごく参考になります。
助かりました。