使用VBA将文件另存为PDF,并以单元格的值作为文件名

10

我正在尝试将四个工作表保存为一个PDF文件。以下是我目前的代码。当我在文件名中使用ActiveSheet.Name命令时,它能够正常工作,但是当我将其更改为动态单元格的范围时,它不再能正常工作并出现错误。任何帮助都将不胜感激。

Sheets(Array("Dashboard Pg 1", "Dashboard Pg 2", "Dashboard Pg 3", _
    "Dashboard Pg 4")).Select
Sheets("Dashboard Pg 1").Activate
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Users\Allen\Desktop\Projects\" & ActiveSheet.Range("K17").Value & ".pdf" _
    , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
    :=False, OpenAfterPublish:=False
Sheets("Summary").Select

K17的计算值是多少?它的值可能包含文件名中不合法的字符吗? - mechanical_meat
在文件名的末尾添加“.pdf” (Filename:="C:\Users\Allen\Desktop\Projects\" & ActiveSheet.Range("K17").Value & ".pdf")? - PatricK
没有添加 .pdf 也没有帮助。在运行时它仍然要求我进行调试。 - Allen
我怀疑您在K17中使用了某种日期形式,然后使用一些单元格格式化技巧来获取所需的文件名。如果使用.Value,日期将表示为带有正斜线的短日期,不能用作文件名。请使用ActiveSheet.Range("K17").Text从单元格中获取格式化的值。确保单元格足够宽以显示完整的格式化文本,否则您的PDF文件名将会显示为######。 - user4039065
如果“K17”确实是一个日期,可以尝试以下代码: Format(ActiveSheet.Range("K17"),"YYYY-MM-DD") - MMerry
1个回答

16

试试这个:

Dim strFilename     As String
Dim rngRange        As Range

'Considering Sheet1 to be where you need to pick file name
Set rngRange = Worksheets("Sheet1").Range("K17")

'Create File name with dateStamp
strFilename = rngRange.Value & Format(Now(), "yyyymmdd hhmmss")

Sheets(Array("Dashboard Pg 1", "Dashboard Pg 2", "Dashboard Pg 3", "Dashboard Pg 4")).Select
Sheets("Dashboard Pg 1").Activate
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Users\Allen\Desktop\Projects\" & strFilename & ".pdf" _
    , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
    :=False, OpenAfterPublish:=False

Sheets("Summary").Select

谢谢,那个完美地解决了问题。像您所做的那样设置范围是解决问题的关键。我感谢大家的帮助和回复。此外,Jeeped,感谢您提到单元格的宽度,因为这也是必要的。 - Allen
两年后,这个答案帮助了我解决了自己的VBA问题 :) 谢谢 - mmenschig
三年两个月后,这个答案帮助我解决了一个棘手的VBA问题,我在其他任何地方都找不到解决方案。只需进行很少的修改,就完成了!谢谢大家! - Luiz Vaughan
六年了,它仍然在工作!感谢@Jur Pertin! - RickyBelmont

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接