通过VBA代码将单个excel工作表保存为单独的PDF文件
我正在尝试将一些单独的excel表格保存到单独的PDF文件中,并根据一些固定单元格和每张表格的名称重命名每个文件,代码如下,但结果与我预期的不一样,请您帮助我检查我的代码是否有问题通过VBA代码将单个excel工作表保存为单独的PDF文件,vba,excel,pdf,Vba,Excel,Pdf,我正在尝试将一些单独的excel表格保存到单独的PDF文件中,并根据一些固定单元格和每张表格的名称重命名每个文件,代码如下,但结果与我预期的不一样,请您帮助我检查我的代码是否有问题 Option Explicit Sub SheetsToPDFs() Dim wks As Worksheet ActiveWorkbook.Sheets(Array("Overall", "AGRM", "AICI", "AMUI", "ARMT")).Select For Each
Option Explicit
Sub SheetsToPDFs()
Dim wks As Worksheet
ActiveWorkbook.Sheets(Array("Overall", "AGRM", "AICI", "AMUI", "ARMT")).Select
For Each wks In Worksheets
wks.Select
wks.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=Range("SavePath").Value & "\" & wks.Name & "_CYProductionReport_" & Range("ReportDate").Value, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
Next wks
End Sub
您不需要任何一条
Select
语句。另外,假设您已选择了图纸数组,则不应迭代完整的工作表
集合
同样使用.Text
属性,假设范围(“ReportDate”)
包含一个日期类型,它实际上是一个长整数。.Text
属性将返回单元格中显示的内容,而不是基础的整型日期值
Option Explicit
Sub SheetsToPDFs()
Dim wks As Worksheet
Dim printSheets as Variant 'Array of worksheets
Dim rptDate as String
'Assign to the array
Set printSheets = ActiveWorkbook.Sheets(Array("Overall", "AGRM", "AICI", "AMUI", "ARMT"))
'Format the report date:
rptDate = Format(Range("ReportDate").Value, "YYYY-MM-DD") 'Modify as needed
'Iterating over the printSheets array:
For Each wks In printSheets
wks.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=Range("SavePath").Value & "\" & wks.Name & _
"_CYProductionReport_" & rptDate, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Next
End Sub
您正在设置一个数组或工作表,但之后并没有真正使用它们。在下面的示例中,数组只是工作表的名称,用于提供父工作表引用
Sub SheetsToPDFs()
Dim w As Long, aSHTs As Variant
aSHTs = Array("Overall", "AGRM", "AICI", "AMUI", "ARMT")
For w = LBound(aSHTs) To UBound(aSHTs)
With Worksheets(aSHTs(w))
'the filename should NOT have a .PDF file extension!
Debug.Print Range("SavePath").Value & "\" & .Name & "_CYProductionReport_" & Range("ReportDate").Text
.ExportAsFixedFormat Type:=xlTypePDF, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
Filename:=Range("SavePath").Value & "\" & .Name & "_CYProductionReport_" & Range("ReportDate").Text, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
End With
Next w
End Sub
如果您在范围(“ReportDate”)
中有一些格式化的日期,您应该使用范围(“ReportDate”).Text
,而不是.Value
。但是结果并不像我预期的那样。我相信您需要设置打印表=…
,并且for ReportDate可能会带来前斜杠。@Jeeped啊,是的,这是一个对象数组,也很好的赶上了日期格式谢谢你这么多大卫,我用了你的代码,它的工作!!!同时也感谢@Jeeped,非常感谢您的回答@如果解决了这个问题,你应该把我们的答案看作是“被接受的”。