使用 Excel VBA saveas 功能通过用户交互保存为 PDF

Posted

技术标签:

【中文标题】使用 Excel VBA saveas 功能通过用户交互保存为 PDF【英文标题】:Using Excel VBA saveas function to save as PDF with user interaction 【发布时间】:2015-01-21 13:46:29 【问题描述】:

首先 - 抱歉,如果标题有些混乱。我不确定如何命名这个问题。

我有一个非常简单的 vba 宏,它可以打开另存为对话框并根据单元格值预填充文件名:

Sub SaveAsFunction()

If Sheet1.Range("B17").Value = vbNullString Then
    MsgBox "Cell B17 must not be empty"
    End
End If

Dim fileName As String
fileName = Sheet1.Range("B17").Value

Application.Dialogs(xlDialogSaveAs).Show fileName

End Sub

有人问我是否可以在对话框打开时将“另存为类型:”字段更改为 PDF,但不能自动保存。最终用户需要先导航到正确的文件夹。我环顾四周,但没有找到任何解释这个特定问题的线程。

谢谢。

【问题讨论】:

【参考方案1】:

试试这个:

Sub pdf()
Application.Dialogs(xlDialogSaveAs).Show "*.*", 57
End Sub

【讨论】:

【参考方案2】:

您无法使用Application.Dialogs 方法完成此操作,但是,您可以使用带有文件过滤器的Application.GetSaveAsFilename 方法:

Function SaveAsPDF() As String
    SaveAsPDF = Application.GetSaveAsFilename(, "PDF Files (*.PDF), *.PDF")
    If (SaveAsPDF = "False") Then SaveAsPDF = "" 'user cancelled.
End Function

这个方法实际上并没有保存任何东西,所以你必须做这样的事情:

Dim saveFilePath As String
saveFilePath = SaveAsPDF()

'if user didn't cancel...
If (Len(saveFilePath) > 0) Then
    'use whatever third-party technology you are planning to use to save to PDF.
End If

【讨论】:

以上是关于使用 Excel VBA saveas 功能通过用户交互保存为 PDF的主要内容,如果未能解决你的问题,请参考以下文章

csv转excel,用vba实现

Excel 2007 VBA ActiveWorkbook SaveAs 未保存...运行时错误 1004

EXCEL workbook.saveas 函数详解

VBA密码保护Excel工作簿而不保存

尝试使用 .SaveAs VBA 函数时出现方法错误

excel 用vba给某个excel.xls文件添加密码 怎么写啊,不要保护工作簿或者工作表,只是加密码而已