VBAでPDFを保存する

このQ&Aのポイント
  • Excel2013でVBAを使用してPDFで保存する方法について教えてください。
  • 通常の名前をつけて保存のように保存先とファイル名をその都度変更できるウィンドウを出す方法を教えてください。
  • あらかじめ指定せずに保存先とファイル名を変更する方法がわかりません。
回答を見る
  • ベストアンサー

VBAでPDFを保存する

Excel2013です。VBAでPDFで保存するコードを書きたいのですが、通常の名前をつけて保存のように保存先とファイル名をその都度変更できるウィンドウを出したいのですが、どのようにすればいいのでしょうか?保存先とファイル名をあらかじめ指定する方法はネット検索でヒットするのですが、そうでない方法が探せません。 以下は現在のコードです。 Sub PDF保存() ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "c:\\xxx.pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

GetSaveAsFilenameメソッドでできるでしょう。 ファイル指定ダイアログの表示 http://www.officepro.jp/excelvba/book_new/index10.html

oimoita
質問者

お礼

ご回答ありがとうございます。無事に目的のコードにたどり着くことができました。 以下私が書いたコードです。他の方の参考になればと思います。 掃き出したいシートに名前がついている場合最後から2行目の●●●●を書き換えてください。そうでない場合はSheets(1)と書けばいいと思います。 Sub PDF保存() Dim fName As String '保存ファイル名及び保存場所の設定 fName = Application.GetSaveAsFilename(, "PDFファイル,*.pdf") '保存操作 Sheets("●●●●").ExportAsFixedFormat Type:=xlTypePDF, Filename:=fName End Sub

関連するQ&A

  • VBA  PDF ファイル名をセルからつける

    ExcelでPDFを出力するときに、たとえばB1のセルに入力されているものを、ファイル名の一部として出力する方法がわかりません。 例えばB1に「資料1」と入力されていた場合で、PDFのファイル名を[TEST資料1.pdf]にしたい場合、下記に何かを足すだけでできますでしょうか? ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "I:\補TEST\TEST.pdf", Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ True End Sub できれば、解説もいただけると助かります。よろしくお願いします。

  • VBAでPDFファイルをメールに添付する

    下記のVBAでエクセルのファイルをpdfに変換して名をつけ保管する、と同時に自動的にメールへ添付したいのですがうまくいきません 「A」でエクセルをpdfに変換して名をつけて保管することができます。 「B」でメールを開き件名の挿入までできます。 「A」のpdfファイルを「B」のメールに添付するプログラムを教えて下さい。 windows7、.エクセルは2010です 「A」 Sub メール() ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\Users\nakasima\Documents\見 積\見積書控\" & Range("O4").Value & ".pdf",_ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ False 「B」 Shell "C:\Program Files\Windows Live\Mail\wlmail.exe /mailurl:mailto:?subject=_ 見積書送付の件" End Sub

  • Excelマクロで1シートの中身変えて一冊のPDF

    ExcelのPDF出力で教えてください シート1に帳票テンプレートを作りまして、連番印刷しておりました。 雰囲気でこんな感じで Sub Macro1() ' Macro1 印刷 Dim i As Integer For i = 1 To 10 Range("a1").Value = Format(i, "0000") Sheets(1).PrintOut Next End Sub #例として1~10としましたが、本当は別シートの台帳の連番で #次は11から10枚とか50枚とか変数で指定してますです。 これをPDF出力へと変えようとして次のように変えようと考えました Sub Macro2() ' Macro2 PDF Dim FilePath As String FilePath = "C:\Temp\" Dim FileName As String Dim i As Integer For i = 1 To 10 Range("a1").Value = Format(i, "0000") FileName = "Temp" & i & ".pdf" Sheets(1).ExportAsFixedFormat Type:=xlTypePDF, _ FileName:=FilePath & FileName, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=False, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False Next End Sub で、ここからが相談なんですが、これだとPDFファイルが10個出来ますよね? そうではなく、一冊の10ページのtemp.pdfとしたい場合はどのようにしましょうか? 一旦ズラズラズラーとPDF作ってからのPDF連結ソフト立ち上げての 手作業とかじゃ面倒なので、全自動でVBA処理で出来ればいいなと思っています。 Sheets(1)に0001作ってSheets(2)に複写 Sheets(1)に0002作ってSheets(3)に複写 Sheets(1)に0003作ってSheets(4)に複写 ・・・ Sheets(2)~Sheets(11)まで選択してあげてのPDFエクスポート Sheets(2)~Sheets(11)削除 という流れを構想してみたのですが 他にも、こうすると簡単だよとかいうアドバイスなどありましたら ぜひともご教示くださいませ♪ Sheets(Array("Sheet2", "Sheet3",・・・)).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF~ ActiveWindow.SelectedSheets.Delete という感じ 一挙にいきなりいっぱいシート生成していくのも見た目びっくりだし 配列にシート名入れていくのも面倒だし、どうしてやるのがベターなのかな?と 思案中です

  • VBEでの引数を書き方について

    VBE の pdf の出力をする構文の書き方についての質問です。 構文は ExportAsFixedFormat (Type, FileName, Quality, IncludeDocProperties, IgnorePrintAreas, From, To, OpenAfterPublish, FixedFormatExtClassPtr) かと思いますが, Webサイトなどで,調べていると Sheets(ShtName).ExportAsFixedFormat Type:=xlTypePDF, _ FileName:=MyPath & "\" & Sheets(ShtName).Name & ".pdf" のように書かれていて,引数の部分に( ) が使われていません。 なぜでしょうか?

  • 違うシートのデータを1つのPDFファイル保存VBA

    Sub データPDFファイル化() If MsgBox("ファイルをPDF化し過去データとして保存します。よろしいでしょうか?", vbYesNo) = vbNo Then End End If If Range("L2").Value <> "" Then Dim Fn As String Fn = Format(Range("L2"), "yyyy年m月d日") & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="D:\フォルダB\過去記録データ保存用フォルダ\データ\" & Fn Else MsgBox "セルL2にファイル名が入力されていません。", vbExclamation End If End Sub この様なコードがあります。エクセル2003では使用出来ないのでエクセル2007以降の使用です。 これはシート名「A」にコマンドボタンを設置し、そのコマンドボタンを押すとPDF化して保存するマクロです。 そこで質問ですがコマンドボタンを押すとシート名「A」と隣にあるシート名「B」をまとめてPDFファイルで保存する方法はどの様にすれば良いのでしょうか? PDF化した際は1ページ目がシート名「A」で2ページ目がシート名「B」を表示させ、名前はシート名「A」のL2(yyyy年m月d日)で保存します。

  • エクセルで印刷時に、ページ毎に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" のような方法は、ネットにもありますが、これだとページ毎にファイル名を変えられないので困っています。 よろしくお願いいたします。

  • Excel2007 VBA で2ページ目PDF

    印刷をする場合なら 例えば、印刷範囲がA1:V60 で1ページだったとすれば A61:V120は2ページ目で印刷されると思います。 もちろん、これはペーパーに印刷した場合です。 これをVBAでPDFにする場合、PDFにしたい範囲が A1:V60 だけなら、1ページとしてPDF化されます。 以下のようなコードで ActiveSheet.ExportAsFixedFormat xlTypePDF, "e:\hogehoge.pdf", xlQualityStandard, True, True またPDFにしたい範囲がA1:V120の時は上記trueをfalseにすることで 1ページに収めたり、A1:V60だけPDF化したりはできます。 そこで、やりたいことですが、 1つのPDFファイルに2ページ 1ページ目はA1:V60 2ページ目はA61:V120 としたいのです。 どなたか教えて頂けると助かります。

  • マクロの動作不良

    エクセルに下のようなボタンマクロを設定しています。 内容は、inpシートに設定している開始番号と終了番号を入力するとその番号分だけreceptシートのでーたを入れ替えてPDFで吐き出すというコードです。 問題なく動いていたのですが、先日、PCを入れ替えた際に確認したところ、pdfが出力されなくなりました。特にエラーはでることなく完了するのですがファイルができません。 変な質問ですが、原因がつかめず困っております。 このエクセルファイルは旧PCでも、新PCでもSDカードに保存して使用しております。 宜しくお願い致します。 Sub ボタン6_Click() Dim s As Long Dim e As Long Dim i As Long Dim outputFilePath As String Dim outputFileName As String On Error Resume Next s = InputBox("開始No.を入力して下さい。") If s = 0 Then Exit Sub e = InputBox("終了No.を入力して下さい。") If e = 0 Then Exit Sub ' PDFの保存先フォルダを指定する outputFilePath = Environ("USERPROFILE") & "\Desktop\" For i = s To e ' 出力するファイル名を指定する outputFileName = "recept_" & i & ".pdf" ' 対象の番号を設定する Worksheets("Inp").Range("C1").Value = i ' PDF出力を行う With Worksheets("Recept").Range("A36:J74") .ExportAsFixedFormat Type:=xlTypePDF, _ fileName:=outputFilePath & outputFileName, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False End With ' 作成したファイル名を表示する MsgBox "PDFファイルを作成しました: " & outputFilePath & outputFileName Next i End Sub

  • エクセルVBAでPDF保存ができません

    エクセルのシートを連続してPDFで出力するVBAで困っています。 自分の端末内で動かす分にはぜんぜん問題はありません。ところが会社のサーバー内の共有フォルダーに保存して動かすと、最初の1件だけは正常にPDFに保存されますが、何度やっても2件目でエラーになりPDFが保存されません。 「実行時エラー1004 ドキュメントを保存できませんでした。ドキュメントが開いているか、保存時にエラーが発生した可能性があります。」 となってしまうのです。 PDFが保存されないうちに次のPDFを作成して保存しているためかと思いApplication.Waitで10秒待つようにしたところ最後まで保存ができました。 しかし、自分の端末内ではWaitを入れなくとも問題なくできます。 質問は、この原因と、一律にApplication.Waitで10秒待たなくとも別の方法で対応する方法はないかということです。 よろしくお願いいたします。 Sub TEST01() '2020/10/10   Dim Fdr As String, Fn As String   Dim n As Long      With Sheets("Test")     .Activate     Fdr = ThisWorkbook.Path & "\" & Format(Date, "YYYYMMDD") & "-PDF" 'PDF保存先'     If Dir(Fdr, vbDirectory) = "" Then        MkDir Fdr '無ければ作成     End If          For n = 1 To 20       .Range("C5").Value = Sheets("Data").Cells(n, "A").Value       Fn = .Range("C5").Value & "_" & .Range("D5").Value  'ファイル名       Application.StatusBar = Fn & " PDFファイル作成中/" & n & "件目"       ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Fdr & "\" & Fn & ".pdf"       Application.Wait Now() + TimeValue("00:00:10")   '10秒PDF保存完了を待つ(1-8秒では保存エラー)     Next n   End With   Application.StatusBar = "" End Sub

  • マクロ

    色々やってみたものの… これ以上できません。 やりたいこと↓ 例)シート2のA~Zにデータがあります (1)シート2、A1~24をシート1、D2に貼り付ける (2)シート1を印刷、PDFでフォルダに保存(保存名は【シート2、A25】又は【シート1、D3&"_"&D4】) (3)シート2のA列を削除、シート1の(1)で張り付けたものを消す ※これをシート2、A列のデータがなくなるまで繰り返す。  ・(※)の繰り返すやり方がわからない  ・下記で実行を何度かやると印刷は上手く行くんですが   保存する時にファイル名が最初のファイル名のままで中身が上書きされてしまいます… Sub カード() ' ' カード Macro ' ' Keyboard Shortcut: Ctrl+a ' Sheets("Sheet2").Select Range("A1:A24").Select Selection.Cut Sheets("Sheet1").Select Range("D2").Select ActiveSheet.Paste Sheets("Sheet2").Select Range("A25").Select ActiveCell.FormulaR1C1 = "" Sheets("Sheet1").Select ChDir "C:\Users\sinnbasi\Desktop\カード" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\Users\sinnbasi\Desktop\カード\RON37806_4021489.pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ IgnorePrintAreas:=False Range("D2:D25").Select Selection.ClearContents Sheets("Sheet2").Select Columns("A:A").Select Selection.Delete Shift:=xlToLeft Sheets("Sheet1").Select End Sub 詳しい方教えて頂けないでしょうか。 宜しくお願い致します。

専門家に質問してみよう