VBA 另存为 PDF 文件名作为单元格值

Posted

技术标签:

【中文标题】VBA 另存为 PDF 文件名作为单元格值【英文标题】:VBA Save as PDF with Filename as Cell Value 【发布时间】:2014-12-08 15:03:29 【问题描述】:

我正在尝试将四张纸保存到一个 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的评价值是多少?该值是否可能包含不是文件名合法字符的字符? 在文件名末尾添加“.pdf” (Filename:="C:\Users\Allen\Desktop\Projects\" & ActiveSheet.Range("K17").Value & ".pdf")? 不添加 .pdf 也没有帮助。它仍然要求我在运行时进行调试 我怀疑你在 K17 中使用了某种形式的日期,然后使用了一些单元格格式化魔法来获得你想要的文件名。如果您使用.Value,则日期将表示为带有正斜杠的短日期,不能在文件名中使用。使用ActiveSheet.Range("K17").Text 从单元格中获取格式化的值。确保确保单元格足够宽以显示完整的格式化文本,否则您最终会以###### 作为 PDF 文件名。 如果“K17”确实是一个日期,试试这样的:Format(ActiveSheet.Range("K17"),"YYYY-MM-DD") 【参考方案1】:

试试这个:

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,感谢您提到单元格的宽度,因为这也是需要的。 两年后,这个答案帮助我解决了我自己的 VBA 问题 :) 谢谢 三年零两个月后,这个答案帮助我解决了我面临的一个微妙的 VBA 问题,而我在其他任何地方都找不到解决方案。只需很少的修改,瞧!谢谢大家!

以上是关于VBA 另存为 PDF 文件名作为单元格值的主要内容,如果未能解决你的问题,请参考以下文章

根据2个单元格值将excel发票另存为xlsm和pdf,然后打印...一个解决方案

vba 指定工作簿,工作表,单元格

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

VBA 如何批量将单元格复制到另一个工作表中

另存为提示位置但使用单元格中的文件名

使用 VBA 进行颜色填充,以单元格值为条件