Excel VBA保存PDF时自定义文件名(追加后缀)问题咨询
如何在VBA中给导出的PDF文件名追加自定义后缀?
我懂你的需求——想把Excel导出成PDF时,保留原文件名并加上-Route-Aprooval后缀,之前的修改因为语法和文件名处理的问题报错了,我来帮你搞定这个问题。
首先,先说说你之前写法的问题:
- 字符串拼接的语法完全错了,VBA里不能直接用
&fName $ "-Route-Aprooval.pdf"这种写法 - 你没有处理原Excel文件的扩展名,直接追加后缀会生成类似
xxx.xlsx-Route-Aprooval.pdf的奇怪文件名,这肯定不是你想要的
正确的实现思路
要实现这个需求,关键是先提取原文件名(不含扩展名),再把它和自定义后缀、.pdf扩展名拼接起来,最后加上文件路径。
修改后的完整代码
Sub DPPtoPDF() Dim originalFileName As String Dim pdfFileName As String ' 提取原Excel文件名(不含扩展名) originalFileName = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) ' 拼接PDF的完整路径和文件名:路径 + 原文件名 + 自定义后缀 + .pdf pdfFileName = ThisWorkbook.Path & "\" & originalFileName & "-Route-Aprooval.pdf" ' 导出所有工作表为PDF ThisWorkbook.Sheets.Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=pdfFileName, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=True ' 回到Frontsheet工作表 Sheets("Frontsheet").Select End Sub
关键代码解释
InStrRev(ThisWorkbook.Name, "."):从右往左查找文件名里第一个.的位置,这样不管你的Excel文件是.xlsx还是.xls格式,都能准确找到扩展名的起始位置Left(ThisWorkbook.Name, ... - 1):截取从开头到.之前的部分,得到不带扩展名的原文件名- 拼接
pdfFileName的时候,把路径、原文件名、自定义后缀和.pdf按顺序连起来,确保文件名格式正确(比如原文件是Project.xlsx,导出的PDF就是Project-Route-Aprooval.pdf)
额外提示
如果你只想导出特定工作表而不是所有表,把ThisWorkbook.Sheets.Select改成指定工作表的选择,比如Sheets(Array("Sheet1", "Frontsheet")).Select就行。
内容的提问来源于stack exchange,提问作者Geographos
相关产品推荐
相关产品推荐

