Excel VBAを使用してエクセルシートをPDF化する方法

このQ&Aのポイント
  • Excel VBAを使用してエクセルシートをPDF化する方法を教えてください。
  • 指定したフォルダに自動的に保存されるようにするためのコードを教えてください。
  • Acrobat Distiller 6.0とAdobe Acrobat 6.0 Standardを使用してExcel VBAを使ってPDF化する方法がわかりません。
回答を見る
  • ベストアンサー

Excel VBAを使用してエクセルシートをPDF化する方法を教えてく

Excel VBAを使用してエクセルシートをPDF化する方法を教えてください。 【質問】 Excel VBAを使用してエクセルシートをPDF化し、指定したフォルダに自動的に保存されるようにしたいです。どういうコードを書けばよいか具体的にご教示いただけないでしょうか? 以下、参考資料 【参考:PSファイルを作成すべく自分で試したコード】 ******************************************************************************** Sub PDF_WRITE() Set objAcroPDDoc = CreateObject("AcroExch.PDDoc") Application.ActivePrinter = "Adobe PDF on Ne01:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ "Adobe PDF on Ne01:", Collate:=True, PrintToFile:=True, PrToFileName:="C:\test.ps" End Sub ******************************************************************************** ↑を実行すると「postscript ファイルの作成時には、ホストフォントを送信する必要があります。」 とのエラーが表示されます。 しかしAdobe PDFの印刷設定から「フォントを送信しない」のチェックをはずしても、実行時に同じエラーが表示されます。 【使用ソフト&環境】 ・Acrobat Distiller 6.0 ・Adobe Acrobat 6.0 Standard ・Excel 2003 ・Windows XP 【不可】 ・業務用PCで使用するので、フリーソフト等、上記以外のソフトウェアのインストールはできません 【質問者スペック】 ・プログラミングは殆どできません。エクセルでマクロを作成する際も、自動記録をベースにして多少変更を加えることができるくらいです。 【今まで参考にしたウェブページ】 http://pdf-file.nnn2.com/  (↑いろいろ詳しく書いてあるのですが、(1)「PDF化する」という項目がピンポイントでは出てこない、(2)私のような初心者には「アレンジする」ということができないので、「コピペしたらすぐ使えるコード」でないと参考にできません。。。) http://www.asp-edita.jp/doda/one/doda1789_15.html (↑ExcelExecute4MacroでPDF化できるのかもしれませんが、コピペして動かすと「入力した数式は正しくありません」とのエラーがでます。)

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#1,2です。 Postscriptのファイルを生成し、そこから更に変換しているので、時間がかかるのかもしれませんね。 解決策は存じません。 #2にご提示のコードで、以前ファイル名指定のダイアログを操作する事にトライしましたが、既にVBAの制御を離れていて、無理な様でした。 余談ですが、会社で試してみたところ、PdfDistillerを用いる方は、Acrobat9 std.でも動作しましたが、AcroExch.PDDocの方は「認証が必要...」といったエラーが発生し、Acrobatを「通常使うプリンタに設定」するといった対策を取らないと動作しませんでした。

onsen225
質問者

お礼

ど素人相手に丁寧にご指導頂き有難うございます! 大変勉強になりました。 VBAからPDF操作するのは難しいですね。 今回いろいろトライして良い経験になりました。

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です、汎用化にトライしました。不足する関数、API宣言は参考URLを参照の事。コントロールパネルの「フォントを送信しない」チェック外しが必要です。ご参考まで。 Sub MakePdf() Dim wbk As Workbook Dim sh As Worksheet Dim objAbDist As Object Dim defPrt As String Dim prtList() As String Dim i As Long Dim pdfPrt As String, altPrt As String prtList = Get_Printers If UBound(prtList) = 0 Then Exit Sub For i = 0 To UBound(prtList) If InStr(prtList(i), "PDF") > 0 Then pdfPrt = prtList(i) Else altPrt = prtList(i) End If Next i Set objAbDist = CreateObject("PdfDistiller.PdfDistiller.1") defPrt = Application.ActivePrinter Set wbk = Workbooks.Open("C:\Test.xls") Application.ActivePrinter = altPrt Application.ActivePrinter = pdfPrt For Each sh In wbk.Worksheets sh.PrintOut copies:=1, preview:=False, _ printtofile:=True, collate:=True, prtofilename:="C:\temp.ps" objAbDist.FileToPDF "C:\temp.ps", "C:\" & sh.Name & ".pdf", vbNullString '文字超過の為、sh.Name & ".log"削除は省略 Next sh wbk.Close savechanges:=False Application.ActivePrinter = defPrt End Sub '参考URLを改造させていただきました Private Function Get_Printers() As String() Dim objWSH As Object Dim objPrinter As Object Dim sPrtList() As String Dim st1 As String Dim st2() As String Dim i As Long Dim ctr As Long Const SUB_ROOT = "Software\Microsoft\Windows NT\CurrentVersion\Devices" Set objWSH = CreateObject("WScript.Network") Set objPrinter = objWSH.EnumPrinterConnections If objPrinter.Count < 2 Then GoTo Exit_Proc Else ctr = 0 For i = 0 To objPrinter.Count - 1 Step 2 ReDim Preserve sPrtList(ctr) sPrtList(ctr) = objPrinter(i + 1) ctr = ctr + 1 Next End If ReDim Preserve st2(0 To ctr - 1) For i = 0 To ctr - 1 st1 = RegRead_API(HKEY_CURRENT_USER, SUB_ROOT, sPrtList(i)) st1 = Replace(st1, "winspool,", "") st2(i) = sPrtList(i) & " on " & st1 Next Get_Printers = st2 Exit_Proc: Set objPrinter = Nothing Set objWSH = Nothing End Function

参考URL:
http://blogs.yahoo.co.jp/bardiel_of_may/40864687.html
onsen225
質問者

お礼

mitarashiさま 教えて頂いたコード(以前の回答の方)を張り付けて動かすことができました! 有難うございます。目的は達成できました。 質問を締め切る前に、図々しくて大変申し訳ないですが、もしおわかりでしたらもう一点ご教示ください。 ↓のコードはPDFに変換するだけですが、これだと対象のエクセルシートのPDF化が2-3秒で完了します。 一方教えて頂いたコードだとPDF化に15秒程度かかります。 なんとか速くする方法は無いでしょうか? ************PDF化コード************************************* Sub PDF_WRITE() Set objAcroPDDoc = CreateObject("AcroExch.PDDoc") Application.ActivePrinter = "Adobe PDF on Ne01:" ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ "Adobe PDF on Ne01:", Collate:=True End Sub

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

下記がお役に立つかもしれません。 Acrobat6 std. xl2000/windows2000の頃でした。 http://okwave.jp/qa/q4847920.html

onsen225
質問者

補足

早速のご回答ありがとうございます! 明日会社で試した後フィードバックさせていただきたいと思います。 過去の質問歴は見ましたが上記は見逃しておりました。 本当に助かります。

関連するQ&A

  • エクセルからPDF作成ができないのはなぜ?

    office2007を使っています。 エクセルでファイルを作成し、pdfファイルにしようと、 名前を付けて保存→adobe PDFを選択して保存すると、 重大なエラーが検出されたため、Adobe Acrobat 8.1.0 Professional を継続して使用できません。アプリケーションを再インストールして、もう一度やり直してください。 とエラーメッセージが出て、pdf化できません。 これはどうやったら改善しますでしょうか。 もしくは、エクセルで作ったファイルを、名前をつけて保存 からではなく、他の方法で簡単にpdf化できるやり方はありませんでしょうか。 どなたか教えてください。 よろしくお願いいたします。

  • VBAでExcelファイルのPDF自動化

    表題の通りの事をしたいと思っています。とあるサイトで参照したvbaコードで、デスクトップにファイルをExcelのブック名と同じ名前でPDFに変換するところまで出来ました。あと自動でやりたいことは2つあり、(1)とあるセルの情報を読み込み保存名にしたい【○○○.pdfという具合に】、(2)生成したpdfファイルの保存先をマクロ内に設け指定したいです。【\\サーバー名\○○\△△\□□などのように】 現状までのコードを表記します。わかる方いらっしゃいましたら、お手数ですがアドバイスお願いします。 自分はマクロは手を出したばかりで、初心者です。宜しくお願いします。 Sub pdf() Dim i As Integer Dim s_prn As String, oldprn As String, flg As Boolean On Error Resume Next s_prn = "Adobe PDF" 'インストールされているPDFプリンタの名前 oldprn = ActivePrinter 'アクティブプリンタを取得 If InStr(oldprn, s_prn) = 0 Then '切替えたいプリンタがアクティブプリンタでない場合 flg = False 'プリンタ切替フラグ For i = 0 To 99 ActivePrinter = s_prn & " on Ne" & Format(i, "00") & ":" '「"プリンタ名"on NeXX:」形式PC用 ActivePrinter = "Ne" & Format(i, "00") & ": の " & s_prn '「NeXX: の "プリンタ名"」形式PC用 If ActivePrinter <> oldprn Then flg = True 'プリンタ切替成功 Exit For End If Next i If flg = False Then 'プリンタ切替失敗の場合 MsgBox "プリンタ名:" & s_prn & " が見つかりません。" Exit Sub End If End If ActiveSheet.PrintOut ActivePrinter = oldprn 'アクティブプリンタを元に戻す MsgBox "終了しました。" End Sub

  • エクセルのシートをPDFに

    XPでMSOFFICEのEXCEL2002を使っています。関数が埋め込まれたり 条件つき書式で色づけしたシートのある部分を選択し、印刷範囲の指定→ADOBEアクロバットで印刷を指示し、プレビューを見るときちんと表示されますが名前をつけて保存のところで、なにも反応がなく、一向にPDFが作成されません。場合によってはEXCELにトラブルが発生して強制終了したり、ファイルの修復とされてしまいます。何度かアクロバットを再インストールしたりしてしばらくはうまくいくのですがすぐまた同じ現象がおきます。もとのEXCELファイルを持ち帰り、自宅でクセロPDF を使って試みましがやはり、PDF化されずEXCEL2002をヴァージョンアップしろといわれるだけです。どなたかお知恵をお貸しください。

  • ワード・エクセルで作成したものをPDF化する方法を教えて下さい。

    ワード・エクセルで作成したものをPDF化したいのですが、どのようにしたら手順を教えて下さい。ソフトはAdobe Acrobat4.0を使用しています。ちなみに私はパソコンに関して初級者なので、よろしくおねがいします。

  • PDFファイルに書き出す方法

    Adobe Acrobat以外のソフトを使用してpdfファイルの作成はできますか?

  • PDF化に関するマクロを教えてください。

    初めまして。どなたかご親切な方、教えてください。 エクセルのファイルに、約50のシートがあります。すべて同じ形式で、A4縦1枚に収まるサイズです。それぞれのシートに、外部からのリンクで数値が入るようになっています。このファイルを開いて、 ・シートごとに ・シートの名前をファイル名として ・PDF化 したいのです。 例)シート「A商事」→「A商事.pdf」 シートごとにPDF化するところまでは自力で組めたのですが、シートの名前を自動でPDFファイルの名前にする工程がうまく行きません。 なお、作業環境はWindows2000pro、Microsft Office Excel 97、Adobe PDF Writerです。派遣社員で、派遣先の環境のため、バージョンアップしたり新しいソフトを(フリーソフトでも)ダウンロードすることはできません。注文が多くて申し訳ありません。 下記に自分で組んだマクロを記述します。アドバイスよろしくお願いいたします。 Sub PDF化() Application.ActivePrinter = "Adobe PDF on Ne01:" For i = 1 To ActiveWorkbook.Sheets.Count Sheets(i).Activate ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _ "Adobe PDF on Ne01:", Collate:=True Next i End Sub

  • エクセルの複数シートpdf印刷が2分割される

    使用 EXCEL2007 ・ Adobe Acrobat 8 STANDARD エクセルで10シートを選択し、印刷プレビューを見ますとページ数は10ページとなっており、プリンタなどで印刷すると正常に10枚印刷されます。 問題はプリンタ選択でadobe PDFを指定し印刷をすると5ページでファイルの保存先を聞いてきます。それを終了させると残りの5ページ分も同じようになります。 結果5ページづつの2ファイルとなってしまします。どのようにすれば10ページ1ファイルでPDFが作成できるのでしょうか? よろしくお願いします。

  • エクセルのシートを1つのPDFファイルにする方法

    wordやpowerpointでは印刷でAcrobatを指定すれば1つのPDFファイルになりますが、エクセルでシートが複数ある場合で、印刷→Acrobatを指定しても1つのPDFにならず複数枚のPDFになります。複数のPDFファイルを1つのPDFファイルにはAcrobatの機能でできますが、面倒なので複数シートを1つのPDFファイルにする方法をご存じの方がおられましたら教えていただければと思います。

  • 大至急!ExcelファイルをPDFファイルに変える方法

    ExcelファイルをPDFファイルに変える方法、どなたか教えて頂けますでしょうか? (Adobe Acrobat 7.0 Documentです) よろしくお願い致します。

  • エクセルをPDF化したいのに・・・

    先ほど検索でエクセルをPDF化する方法を探し、試してみましたが、出来ませんでしたので質問させて下さい。 念の為ワードでも試してみましたが同じことでした。根本的な考え方が間違えていたらすいません。 まずやりたいことと言うのは、役所の電子入札に参加するために入札価額の内訳書をエクセルで作成します。で、それをPDF化して入札書に添付し送信しなければならないのです。 次に「教えて~」を検索して試した方法なのですが、メニューバーからPDF化できるアイコンを探してみました。どこにもありませんでした。他に印刷画面でプリンタ設定をアドビ(アクロバット?)にしてみようとしましたが、これも見つかりませんでした。それとエクセルファイルのアイコンをそのままアクロバットにドラッグしてみましたが、「開くことが出来ません」みたいな警告が出ました。 今まではPDF化したものをよそからもらってきて、それを開くということしかしたことありませんので、その逆は初めてなのです。 うちはWin98で、オフィス2000が入ってます。で、アクロバットリーダーは5.0です。 どなたかよろしくご教授願います!!

専門家に質問してみよう