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,然后打印...一个解决方案