34

データベースからデータを取得し、3 枚の要約レポート情報を作成するレポート スプレッドシートがあります。コマンド ラインからスプレッドシートを自動的に実行し、3 つのレポート シートすべてを PDF ファイルとして自動的に保存したいと考えています。

最初は、一連の「PDFとして印刷」によってシート上のVBAマクロを使用できると考えましたが、出力ファイル名を指定するには、中間の対話型ダイアログボックスが必要です。次に、pdfとして保存でき、マクロで出力ファイル名を設定できることがわかりました。ただし、これにより 3 つの個別のファイルが作成されるため、後でそれらを外部でまとめてマージする必要があります。

(他の保存モードではワークブック全体が保存されるように見えるのに、pdf として保存すると 1 つのシートしか保存されないのは奇妙です。)

はい、後で 3 つのファイルを結合するためのツールがありますが、Excel で複数のシートを 1 つの PDF ファイルとして保存する簡単な方法があるかどうか知りたいです。

私は今、次のような一連のことで印刷します:

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, ...

代わりに(疑似コード)のような単一のステートメントを実行できますか。

ThisWorkbook.Sheets(1,2,3,4).ExportAsFixedFormat Type:=xlTypePDF, ...
4

3 に答える 3

88

組み合わせるシートを選択することから始めます。

ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")).Select

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\tempo.pdf", Quality:= xlQualityStandard, IncludeDocProperties:=True, _
     IgnorePrintAreas:=False, OpenAfterPublish:=True
于 2013-01-18T21:32:15.253 に答える
10

ティムの答えに似ていますが、2007年のチェックがあります(デフォルトではPDFエクスポートがインストールされていません):

Public Sub subCreatePDF()

    IsPDFLibraryInstalled でない場合
        '適切なリンクを含むユーザーフォームとしてこれを表示することをお勧めします:
        MsgBox "アドインをインストールして PDF にエクスポートしてください。http://www.microsoft.com/downloads/details.aspx?familyid=4d951911-3e7e-4ae6-b059-a2e79ed87041 にあります".
        サブを終了
    終了条件

    ActiveSheet.ExportAsFixedFormat タイプ:=xlTypePDF, _
        ファイル名:=ActiveWorkbook.Path & Application.PathSeparator & _
        ActiveSheet.Name & " für " & Range("SelectedName").Value & ".pdf", _
        品質:=xlQualityStandard、IncludeDocProperties:=True、_
        IgnorePrintAreas:=False、OpenAfterPublish:=True
サブ終了

Private Function IsPDFLibraryInstalled() As Boolean
' クレジットは Ron DeBruin (http://www.rondebruin.nl/pdf.htm) に送られます
    IsPDFLibraryInstalled = _
        (Dir(Environ("commonprogramfiles") & _
        "\Microsoft 共有\OFFICE" & _
        Format(Val(Application.Version), "00") & _
        "\EXP_PDF.DLL") <> "")
終了機能
于 2013-01-20T22:26:41.030 に答える
6

PDF へのエクスポート後に次の行を追加することをお勧めします。

ThisWorkbook.Sheets("Sheet1").Select

(例:Sheet1後でアクティブにしたい単一のシートです)

複数のシートを選択した状態のままにしておくと、一部のコードの実行で問題が発生する場合があります。(例: 複数のシートがアクティブに選択されている場合、保護解除は正しく機能しません。)

于 2014-09-12T19:49:35.183 に答える