0

選択して単一の PDF ファイルに変換したい複数のシートを含むワークブックがあります。

正常に動作し、ファイルを作成する次のコードを作成しました。

Sub Print_Project_Report_To_PDF

    Dim FilePathandName As String
    MyDate = Format(DateSerial(Year(Now), Month(Now) - 1, 1), "mmmm yyyy")
    MyPath = ThisWorkbook.Path & "\"
    MyFile = "Project Progress Report - " & MyDate & ".pdf"
    FilePathandName = MyPath & MyFile

    ThisWorkbook.Sheets(Array("PR_COVER_PAGE", "PR_SUMMARY", _
    "PR_PROJECT_DETAILS", "PR_INTERNAL RESOURCES", "PR_TIME", _
    "PR_REVENUE_FORECAST_SUMMARY", "PR_ORIGINAL_REVENUE_FORECAST", _
    "PR_ACTUAL_REVENUE_FORECAST", "PR_COSTS", "PR_ISSUES", "MONTHLY FINANCIAL    REPORT", _
    "PG-SC_COVER_LETTER", "PG-SC_CLAIM_SUMMARY", "PG-SC_TRADE", "PG-SC_HYDRAULICS", _
    "PG-SC_MECHANICAL", "PG-SC_MEDICAL_GASES", "PG-SC_ELECTRICAL", "PG-SC_VARIATION", _
    "PG-SC_MONTHLY_CASHFLOW", "PG-MH_COVER_LETTER", "PG-MH_CLAIM_SUMMARY", _
    "PG-MH_TRADE", "PG-MH_HYDRAULICS", "PG-MH_MECHANICAL", "PG-MH_MEDICAL_GASES", _
    "PG-MH_ELECTRICAL", "PG-MH_VARIATION", "PG-MH_MONTHLY_CASHFLOW", "CLIENT_COVER", _
    "CLIENT_SUMMARY", "CLIENT_ISSUES")).Select

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FilePathandName, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, OpenAfterPublish:=True

    ThisWorkbook.Sheets("Dashboard").Select

End Sub

問題は、配列で指定した順序でシートを使用して PDF ファイルが作成されないことです。これらは、ワークブックに表示される順序になっています (左から右)。必要なシートのみが正しく含まれていますが、必要な順序ではありません。

特定の漸進的な方法で設定されているため、ワークブックのシートの順序を変更したくありません。

ドキュメントが公開されたときにシートの順序を特定できるようにするコードを手伝ってくれる人はいますか?

どんな助けでも大歓迎です。

4

2 に答える 2

0

現在のワークブックを一時ファイルにコピーし、シートのリストを並べ替えるサンプル VBA コードを次に示します。印刷前に次のルーチンを使用します。

Sub CopyAndReorder()
    Dim wbCopy As Workbook
    ThisWorkbook.SaveCopyAs "C:\TEMP\XXXX.XLS"
    Set wbCopy = Workbooks.Open("C:\TEMP\XXXX.XLS")
    ReorderSheets wbCopy
End Sub

Sub ReorderSheets(wb As Workbook)
    Dim shNames As Variant, shName As Variant, sh As Worksheet
    shNames = Array("Table3", "Table2", "Table1")
    For Each shName In shNames
        Set sh = wb.Sheets(shName)
        sh.Move After:=wb.Sheets(wb.Sheets.Count)
    Next
End Sub

(もちろん、このコード スニペットを必要に応じて調整する必要があります。もちろん、より適切な一時ファイル名を使用し、後で新しいファイルを削除し、外部からシートのリストを提供するなどしてください。ただし、アイデアは得られると思います)。

于 2013-03-27T07:40:27.483 に答える
0

質問の下の最初のアイデア/コメントで@SiddharthRoutに同意します。ただし、使用する複雑な PowerPoint プレゼンテーションを印刷すると、非常によく似た状況になります。

PDFクリエイターアプリ

最初のステップで、そのソフトウェアを実行し、「印刷の停止」オプションを設定します。そのソフトウェアに(ワークシートを印刷する方法で)各ワークシートを個別に送信すると、最初に正しい順序でリストに積み重ねられた個別のドキュメントになります。特別な機能を使用すると、それらを 1 つのドキュメントに一致させて印刷することができます。これは非常に便利で信頼性の高いソリューションです。

于 2013-03-27T06:57:05.977 に答える