質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

17226閲覧

【VBA】Excelで差し込み印刷をpdf化する

lyzmfeqpxs54

総合スコア237

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2018/05/24 09:38

編集2018/05/30 02:58

いつもお世話になります。

下記サイトを参考に、Excelでリストから差し込み印刷をすることはできたました(リストの名前を順に変更しながら印刷)。それを印刷ではなく、pdf化し、一つのファイルにまとめたいのですが、その作業でつまずいております。

https://mokomokomomoko.com/excel_macro_print/

.PrintOut Copies:=1, Collate:=True
部分をPrintToFile、PrToFileNameなど追加したりしてみたのですがうまくいかず……。
VBAは初めて触った状態で理解が乏しく申し訳ございません。

正しい方法をご教示いただけますと幸いです。
よろしくお願いいたします。

VBA

1Sub 印刷() 2 Dim LastRow As Long 3 Dim i As Long 4 Dim myNo As Long 5 6 If vbNo = MsgBox("印刷を開始していいですか?", vbYesNo) Then Exit Sub 7 8 With Worksheets("アカウントデータ") 9 LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 10 11 For i = 1 To LastRow 12 13 myNo = .Range("A" & i).Value 14 15 With Worksheets("印刷シート") 16 .Range("J4").Value = myNo 17 .PrintOut Copies:=1, Collate:=True 18 End With 19 Next i 20 End With 21 22 MsgBox "印刷が終わりました" 23 24End Sub 25 26ーーーーーーーーーーーーーー以下方法で解決しましたーーーーーーーーーー 27 28Sub 印刷() 29 Dim LastRow As Long 30 Dim i As Long 31 Dim myNo As Long 32 33 If vbNo = MsgBox("印刷を開始していいですか?", vbYesNo) Then Exit Sub 34 35 With Worksheets("アカウントデータ") 36 LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 37 38 For i = 1 To LastRow 39 40 myNo = .Range("A" & i).Value 41 42 Worksheets("印刷シート").Range("J4").Value = myNo 43 44 Dim fileName As String 45 fileName = "C:\Users\ユーザー名\sagyou\" & CStr(i) & ".pdf" 46 47 48 Worksheets("印刷シート").PageSetup.PrintArea = "A1:F30" 49 Worksheets("印刷シート").ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName, IgnorePrintAreas:=False 50 51 Next i 52 End With 53 54 MsgBox "印刷が終わりました" 55 56End Sub 57 58 59

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Windows10では、標準でMicrosoft Print to PDF というプリンタドライバがあるので、それにプリント出力する、というテではどないでしょうか

投稿2018/05/24 12:17

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lyzmfeqpxs54

2018/05/24 13:14

早速のご回答ありがとうございます。 下記の印刷メソッドを書き換えて、Microsoft Print to PDFに出力するようにできるという解釈でよいでしょうか。可能であればその方法をご教示いただけませんでしょうか。 With Worksheets("印刷シート") .Range("J4").Value = myNo .PrintOut Copies:=1, Collate:=True End With
y_waiwai

2018/05/24 13:24

まず、プリンタの中にMicrosoft Print to PDF(とか、他にもPDF表示ソフトにおまけでついてくるPDFプリンタがありますね)があるかどうかを確認しましょう。 まあでも、こういうPDFプリンタで出そうとすると、途中で出力ファイル名を聞かれるダイアログが出るので、こういう用途には向かないかもしれません。 まーでも、そこらへんの参考になりそうなリンクを貼っておきます。 https://kosapi.com/post-2207/ https://www.excel-excel.com/tips/vba_446.html
guest

0

ベストアンサー

PrintOutnメソッドの代わりに、ExportAsFixedFormatメソッドを使えばいいでしょう。

下記をご参考に。

初心者でも簡単!エクセルVBAでPDFを出力する最もシンプルなプログラム

追記

ページエリアも指定の場所でない部分がpdf化されるだけになってしまいます。

Workbook.ExportAsFixedFormat メソッド (Excel)

上記より引用
|名前|必須 / 省略可能|データ型|説明|
|:--|:--:|--:|
|IgnorePrintAreas|省略可能|バリアント型 (Variant)|True に設定すると、発行する場合に印刷範囲が無視されます。 False に設定すると、発行する場合に印刷範囲が使用されます|

下記でどうでしょう。

vba

1 Worksheets("印刷シート").PageSetup.PrintArea = "A1:E30" 2 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName _ 3 IgnorePrintAreas = False

投稿2018/05/24 12:13

編集2018/05/24 13:27
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lyzmfeqpxs54

2018/05/24 12:54

早速のご回答ありがとうございます。 ご教示いただいたサイトを参考にPrintOutではなく、ExportAsFixedFormatを使用し書き換えてみたのですがうまくいきません。ページエリアも指定の場所でない部分がpdf化されるだけになってしまいます。 間違っている箇所をご指摘いただけないでしょうか。
lyzmfeqpxs54

2018/05/30 03:03

ご教示いただいた内容もとに、追記した方法で解決することができました。.pdf 1.pdf 2.pdf ・・・のように1ファイルずつ作成し、後で結合する形にしました。 またご教示いただけますと幸いです。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問