我想在这张excel表上有一个按钮,其名称应为“另存为PDF”。
当我按下此按钮时,它应该将excel表的所有数据保存为PDF格式的路径-M:\ formats \'File Name'
'文件名'应为单元格No H8的值。
换句话说,当我点击“另存为PDF”按钮时,它应该将pdf格式的excel文件保存到上面提到的路径中,并且还使用在单元格no H8中写入的名称。
例如,如果名称ANDREW PITTERSON是用H8单元格编写的,那么它应该以相同的名称保存。 ANDREW PITTERSON。
请看这个快照。
答案 0 :(得分:0)
这是一篇简单文章的链接,可以做这类事情。 http://www.contextures.com/excelvbapdf.html
我已经在Excel 2013中测试了代码示例,它运行正常。该代码询问用户将PDF保存在哪个目录中。
但是您的问题是您还要保存到特定位置(无需用户干预)并从单元格中获取文件名。
更新 - 创建PDF后,您还希望将文件另存为XLSM。
下面的代码完成了你所追求的目标(归功于原作者,但我自己的强迫症导致我将var名称更改为我喜欢的格式)。
我猜OP想知道它是如何完成的,而不仅仅是答案,所以我试图让这个例子易于理解,而不是试图观察最佳实践 - 我很感激没有为此投票。
请注意,您必须首先打开Excel代码窗口,进入工具,然后引用并选择“Microsoft Scripting Runtime”,然后单击“确定”。这使您可以使用许多有用的功能。
我保持目录路径(硬编码)和文件名分开,这样我就能以更清晰的方式获得'BaseName'。显然,这可以用较少的线来完成,但存在使其更难以遵循的风险。
Sub ExportAPDF_and_SaveAsXLSM()
Dim wsThisWorkSheet As Worksheet
Dim objFileSystemObject As New Scripting.FileSystemObject
Dim strFileName As String
Dim strBasePath As String
strBasePath = "M:\formats\"
strFileName = Range("H8")
On Error GoTo errHandler
Set wsThisWorkSheet = ActiveSheet
wsThisWorkSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=strBasePath & strFileName, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
MsgBox "PDF file has been created."
' Now we need to get rid of the .PDF extension. Many ways to code round this, but here is a built in function.
strFileName = objFileSystemObject.GetBaseName(strFileName) & ".xlsm"
wsThisWorkSheet.SaveAs Filename:=strBasePath & strFileName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
MsgBox "Workbook now saved in XLSM format."
exitHandler:
Exit Sub
errHandler:
MsgBox "Could not create PDF file"
Resume exitHandler
End Sub
只需将按钮(ActiveX按钮)添加到工作表中,然后从按钮代码窗口调用此子代码(或者直接将代码粘贴到按钮代码窗口中)。
希望有所帮助。
增加: 要将文件另存为XLSX(无宏),请将代码替换为SUB的末尾:
Application.DisplayAlerts = False
strFileName = objFileSystemObject.GetBaseName(strFileName) & ".xlsx"
wsThisWorkSheet.SaveAs Filename:=strBasePath & strFileName, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = False