Excel VBA通用PDF生成求助:如何无需指定固定路径创建PDF
解决Excel VBA生成PDF无需固定路径的问题
没问题,我来帮你搞定这个路径固化的问题!要让代码在任意电脑上都能正常生成PDF,我们可以用几种动态获取路径的方式,完全不需要写死C:\Users\Name这种固定路径,下面给你几种实用方案:
方案1:把PDF保存在当前Excel文件的同目录下
这是最常用的方式,PDF会和你的Excel工作簿放在一起,不管你把文件拷贝到哪台电脑,路径都能自动适配。需要注意的是,如果你的工作簿还没保存过,ThisWorkbook.Path会返回空值,所以最好加个判断:
Sub pdf_drucken2() Dim savePath As String ' 检查工作簿是否已保存 If ThisWorkbook.Path = "" Then MsgBox "请先保存你的Excel工作簿!", vbExclamation Exit Sub End If ' 组合PDF保存路径(和Excel同目录,文件名可自定义) savePath = ThisWorkbook.Path & "\test213.pdf" ' 导出PDF(注意原代码里的x1TypePDF是拼写错误,应该是xlTypePDF) Worksheets("LaptopReport").ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=savePath, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
方案2:保存到用户的「文档」文件夹
每个Windows用户都有默认的Documents文件夹,用系统环境变量可以直接获取,不用管用户名是什么:
Sub pdf_drucken2() Dim savePath As String ' 获取用户文档文件夹路径 savePath = Environ("USERPROFILE") & "\Documents\test213.pdf" Worksheets("LaptopReport").ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=savePath, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
方案3:让用户手动选择保存位置
如果想让用户自己决定PDF存在哪,可以用GetSaveAsFilename弹出保存对话框,体验更友好:
Sub pdf_drucken2() Dim savePath As Variant ' 弹出保存对话框,默认文件名test213.pdf,文件类型选PDF savePath = Application.GetSaveAsFilename( _ InitialFileName:="test213.pdf", _ FileFilter:="PDF 文件 (*.pdf), *.pdf") ' 如果用户点击了取消,就退出程序 If savePath = False Then Exit Sub Worksheets("LaptopReport").ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=savePath, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
重要提醒:
原代码里的x1TypePDF是拼写错误!这里的1是数字,正确的应该是小写字母l,也就是xlTypePDF,不然运行时会报错,一定要改过来哦~
内容的提问来源于stack exchange,提问作者crat
相关产品推荐
相关产品推荐

