- ベストアンサー
pdf印刷時に登録ファイル名の確認を無効化したい
- Excel 2010でPDFファイル化する際に、ファイル名の確認を無効にする方法について
- Excelマクロを使用してPDFファイル化する際に、ファイル名の入力を省略する方法について
- PDF印刷時にファイル名の確認をスキップする方法について
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Pnameの値の変化を追ってゆけば (コード上で F9 、後は F8 でステップ実行)すぐに確認できたのに。 前略 'ファイル名17桁取得 ’Pname = Left(Fname, 17) 下記のループ内に移動 ' Do While Fname <> "" 'ファイル名17桁取得 Pname = Left(Fname, 17) 'ここへ移動しました If Fname <> ThisWorkbook.Name Then Workbooks.Open Fol & "\" & Fname For Each Ws In Worksheets ' Ws.PrintOut ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\test\" & Pname, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ False Next '下記指定をしないと登録フォルダのファイル先頭1つファイルしかpdf化されない ’Pname = Left(Fname, 17) これは不要 Workbooks(Fname).Close SaveChanges:=False 後略 ExportAsFixedFormat は既存同名ファイルがあっても 確認メッセージは出さずに上書きします。
その他の回答 (4)
- NotFound404
- ベストアンサー率70% (288/408)
>登録ファイルが1つでも”名前をつけて保存”が表示されます。 なるほど、私の使わせてもらっているBullzip PDF Printer とは動作が異なるようですね。 せっかくなので自BookのワークシートをPDF出力するサンプルを載せときます。 少しは参考になるかと思います。 投稿用にタブインデントの代わりに全角スペースを代用しています。 フォルダ内全てとなるとパスワードありのファイルやAUTO_OPEN / WorkBook_Openも 考慮する必要もあるかもしれませんね。 Sub PDFout() Dim i As Long Dim SHs Dim SHcurrent As Worksheet If Application.Version < "12.0" Then MsgBox "この機能はExcel2007以降でのみ使用出来ます" Exit Sub End If Set SHcurrent = ActiveSheet ReDim SHs(Worksheets.Count - 1) '拡張子違いで同名ブックの対応未決定 For i = 1 To Worksheets.Count 'ワークシートごとに出力 If WorksheetFunction.CountA(Worksheets(i).Cells) <> 0 Then '空白シート除外 Worksheets(i).ExportAsFixedFormat Type:=xlTypePDF, _ FileName:=ThisWorkbook.Path & "\" _ & Left(ThisWorkbook.Name, InStr(ThisWorkbook.Name, ".") - 1) _ & "-" & Worksheets(i).Name & ".pdf", _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False End If '全ワークシートをまとめて一つのPDFにするために配列に格納 SHs(i - 1) = Worksheets(i).Name Next Worksheets(SHs).Select '空白シートは自動的に印刷出力対象にはならない様子 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ FileName:=ThisWorkbook.Path & "\" _ & Left(ThisWorkbook.Name, InStr(ThisWorkbook.Name, ".") - 1) _ & "(" & Worksheets.Count & ").pdf", _ Quality:=xlQualityStandard, _ IncludeDocProperties:=False, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False SHcurrent.Select Set SHcurrent = Nothing End Sub
お礼
ありがとうございます。
補足
大変参考になりました。 cutepdfへ印刷すると、名前を付けて保存が表示される仕様みたいなので、 cutepdfへの出力を廃止しました。 代わりに、教えていただいた参考マクロのActiveSheet.ExportAsFixedFormat Type で代用してみました。 下記test1のマクロで名前をつけて保存のポップアップは、聞かれなくなりました。 しかしながら、 *****************.xlsm.pdf の様に登録されるのがちょっと気になりました。 *はファイル名17桁です。 Sub test1() Application.DisplayAlerts = False Dim Fol As String Dim Fname As String Dim Ws As Worksheet Fol = "C:\test" Fname = Dir(Fol & "\*.xls*") Do While Fname <> "" If Fname <> ThisWorkbook.Name Then Workbooks.Open Fol & "\" & Fname For Each Ws In Worksheets 'cutepdfへの出力廃止 ' Ws.PrintOut 'pdfで保存 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\test\" & Fname, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ False Next Workbooks(Fname).Close SaveChanges:=False End If Fname = Dir() Loop End Sub なので、ちょっと変更してみました。 Sub test2() Application.DisplayAlerts = False Dim Fol As String Dim Fname As String Dim Pname As String Dim Ws As Worksheet Fol = "C:\test" Fname = Dir(Fol & "\*.xls*") 'ファイル名17桁取得 Pname = Left(Fname, 17) ' Do While Fname <> "" If Fname <> ThisWorkbook.Name Then Workbooks.Open Fol & "\" & Fname For Each Ws In Worksheets ' Ws.PrintOut ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\test\" & Pname, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ False Next '下記指定をしないと登録フォルダのファイル先頭1つファイルしかpdf化されない Pname = Left(Fname, 17) Workbooks(Fname).Close SaveChanges:=False End If Fname = Dir() Loop End Sub test2のマクロで *****************.pdf というファイル名で保存される様になり、ほぼほぼやりたい内容は実現できたのですが、登録されているファイルの最後が保存できない状況です。 4つのxlsmファイルを登録していたら3つしかpdfができない。 test1のマクロは、4つのxlsmファイルで4つのpdfができます。 どこが悪いのか、分かりましたら、教えていただきたく。
- NotFound404
- ベストアンサー率70% (288/408)
ここで For Each Ws In Worksheets Ws.PrintOut Next としていますから拡張子を除いたブック名 & .pdf で保存されているわけです。 ワークシートが複数の場合に二番目以降は上書きの確認が出ているのでは? QutePDF Writer に既存ファイルがある場合は後ろに連結する・・・ような オプションでもない限り。 (QutePDF Writer は使ったことはありません。) Excel2007以降ならPDFでも保存できるようになったので QutePDF Writer 独自の機能が必要でなければ、そっちで・・・。 全てのExcelファイルを対象と考えているのなら Fname = Dir(Fol & "\*.xlsm") でマクロ有効ファイルだけを選択しているのも気になります。 "\*.xls*" では?
お礼
回答ありがとうございます。
補足
ワークシートが複数の場合に二番目以降は上書きの確認が出ているのでは? → 登録ファイルが1つでも”名前をつけて保存”が表示されます。 acrobat writerが入っているパソコンで印刷設定しても同じでした。 Excel2007以降ならPDFでも保存できるようになったので → 調べてみます。 Fname = Dir(Fol & "\*.xlsm") でマクロ有効ファイルだけを選択しているのも気になります。 "\*.xls*" では? → testフォルダに登録しているファイルの拡張子が全てxlsmだったのです。 特に意識していたわけではありません。
- imogasi
- ベストアンサー率27% (4737/17069)
質問の核心ではないですが、質問のコードが適当ですか? >ファイルを開いてpdfファイルを作成可能なのですが PDFファイウルで保存のコードは質問のコードにないのでは。 参考 「VBA エクセル pdfファイルで保存」でGoogleで照会してみたら その最初の http://excel.style-mods.net/tips_vba/tips_vba_8_11.htm など。 >cutepdfwriterを通常使うプリンタに設定しています。 参考 同じく cutepdfwriterで照会したら。 http://stackoverflow.com/questions/33101788/print-all-sheets-through-cutepdf-writer がある。 ーー >Fname <> ThisWorkbook.Name Then 開くファイル名が決まっているのに、なぜDir関数をDo-Loopで繰り回して探すのかわからなかった。
お礼
回答ありがとうございます
補足
PDFファイルで保存のコードは質問のコードにないのでは に対しては、 Ws.PrintOut の部分で印刷出力しています。 cutepdfwriterを通常のプリンタで指定しておくと、excelから印刷することでpdfファイルが作成できます。 excelで印刷=pdfで保存 という構成になります。 開くファイル名が決まっているのに、なぜDir関数をDo-Loopで繰り回して探すのかわからなかった。 → 1つのフォルダ内に登録したexcelファイルを全てpdfにしたいのです。 上記マクロはWEBに掲載されていたものをそのまま流用してます。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>方法は、ありますでしょうか? 質問者さんの方法は「印刷するとpdfファイルが作成される、仮想プリンタに印刷する」という方法で、pdf化しています。 システム的には「Excelの制御を離れ、プリンタ出力を行なっているだけ」なので、Excelの側から何らかの操作をする事は出来ません。 つまり「ファイル名をそのままでpdf化する事はできない」です。
お礼
回答ありがとうございます。
補足
Excelの側から何らかの操作をする事は出来ません。 だとすると、保存する名称が表示されるのは回避できないということですね。 なお、 「ファイル名をそのままでpdf化する事はできない」に関しては、違ってます。 cutepdfwriterで印刷すると、excelファイル名のxlsxより前の部分でpdfのファイル化されます。 test.xlsx を印刷すると test.pdf で保存と聞いてきます。 なので、ファイル名をそのままpdf化はできています。 1件1件保存の確認ポップアップがでなくなればというおもいです。 補足まで。
お礼
ばっちりでした。ありがとうございます。 ”コード上で F9 、後は F8 でステップ実行”のあたりは、勉強します。