使用 VBA Excel 中的 Workbook.PrintOut() 方法打印为 PDF 后获取位置或直接打开文件

Get location or directly open file after printing to PDF using Workbook.PrintOut() method in VBA Excel

我正在编写一个将整个工作簿导出到 PDF 文件的宏。

生成过程正常,但现在我想让它在完成后打开新生成的文件。问题是,由于文件名不是预定义的,我不能简单地使用它的路径和名称打开它。

我正在使用方法 PrintOut 生成之前 selected ActivePrinter 为“Microsoft Print to PDF”,或者如果发生错误,用户将被要求 select 手动使用Application.Dialogs(xlDialogPrinterSetup).Show.

这是这部分的片段:

Call set_printer

ActiveWorkbook.PrintOut Copies:=1, PrintToFile:=True

... 其中 set_printer() 是:

Public Sub set_printer()

    On Error GoTo problem_with_pdf_printer

    Application.ActivePrinter = "Microsoft Print to PDF"
    
Done: Exit Sub
    
problem_with_pdf_printer:

    MsgBox "There is a problem with the Microsoft Print to PDF printer." & Chr(13) & Chr(13) & _
        "Select another one manually!", vbInformation, "Warning!"
    
    Application.Dialogs(xlDialogPrinterSetup).Show
    
End Sub

有没有办法在执行该方法后捕获新文件位置?我想到的另一个想法是自定义“select 文件位置”-对话可以帮助我预定义文件路径,但遗憾的是我不知道如何实现它。

非常感谢您,如果您有任何建议和想法,我将非常高兴!

转换为 pdf 似乎是可行的方法。

Sub test()
    Dim Wb As Workbook
    Dim fn As String
    
    Set Wb = ThisWorkbook
    
    ChDir ThisWorkbook.Path 'C:\yourpath
    
    fn = "test.pdf"
    fn = Application.GetSaveAsFilename(fn, FileFilter:="PDF Files,*.pdf")
        
    Wb.ExportAsFixedFormat xlTypePDF, fn, OpenAfterPublish:=True
End Sub