• 締切済み

エクセルで印刷時に、ページ毎にPDF保存するマクロ

エクセルで印刷時にPDF保存をしたいですのですが、ページ毎に名前を変えて保存をしたいです。 例えば、 For i = 1 To 50 Application.ActivePrinter = "Microsoft Print to PDF on Ne02:" ActiveSheet.PrintOut From:=i, to:=i Next i であれば、1ページずつ保存は出来るのですが、ファイル名もセルを参照しながら変えていきたいです。 具体的には、G列の1行名から50行目まで取引先の名前を入れていて 印刷毎に、取引先名でPDFを保存します。 Activesheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=ActiveWorkbook.Path & "\" & fName & ".pdf" のような方法は、ネットにもありますが、これだとページ毎にファイル名を変えられないので困っています。 よろしくお願いいたします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

質問には何も説明されていないが、 下記例で言えば、下記の点は、すでに上手く行っているのか?  全般に小生が、勘違いしている(とか、そんなことをしなくてよい)かもしれないので、その際はごめんなさい。 でも関連する難しいこと(点)を、質問には触れてないので、大丈夫かと思った。 (質問者のVBAの技量のことを、普通は質問に述べないので、いつも回答に気がかりが残る。) 下記VBAコードのテスト例では、 (1)共通部分 第1行からー第6行目までとしている (2)名前ごとに15行明細行があるとしている例 この15行に当たる部分は、各名前ごとに、一定数の行数か?  バラバラだと、改ページを探すという、コード的に、手を加えないといけないと思うが。 こういう心配はいらないのか。 Sub 改ページ2() Dim i As Long Dim 最終行 As Long 最終行 = Cells(Rows.Count, 1).End(xlUp).Row For i = 6 To 最終行 Step 15 ActiveSheet.Rows(i).PageBreak = xlPageBreakManual Next i End Sub ==== ページ区切りごと印刷 Sub test02() Range("A1:E45").PrintOut End Sub 以上は、印刷 区分的には、思い通り印刷するようだ。 == Sub test03() 'ページ区切り行を取得 For i = 1 To ActiveSheet.HPageBreaks.Count MsgBox i j = ActiveSheet.HPageBreaks(i).Location.Row - 1 MsgBox j Next i End Sub を改修して、各ページの行範囲(スタート行とエンド行を取得) == この範囲のデータを、コピーし、別ブック(1ブックまたは名前の個別に)、(別シート=>1シートのみ)にエクセルファイルにする。 ーー 其の後これらのファイルをPDFファイルに変換する。 うまくPDFファイルで保存のVBAが見つかれば、エクセルファイルを作らず、直接PDFファイルが作れる。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

#2です。ごめんなさい、50ページあるんでしたね。直します。 Sub sample()  Dim i As Long    For i = 1 To 50   ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _   Filename:=Cells(i, 7).Value, _   Quality:=xlQualityStandard, _   IncludeDocProperties:=True, _   IgnorePrintAreas:=False, _   From:=i, _   to:=i, _   OpenAfterPublish:=False  Next i   End Sub

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

以下のコードでイケると思います。 Sub sample()  Dim i As Long    For i = 1 To 2   ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _   Filename:=Cells(i, 7).Value, _   Quality:=xlQualityStandard, _   IncludeDocProperties:=True, _   IgnorePrintAreas:=False, _   From:=i, _   to:=i, _   OpenAfterPublish:=False  Next i   End Sub

回答No.1

fName = Cells(i, "G") ですかね

関連するQ&A