通过VBA代码将单个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

我正在尝试将一些单独的excel表格保存到单独的PDF文件中,并根据一些固定单元格和每张表格的名称重命名每个文件,代码如下,但结果与我预期的不一样,请您帮助我检查我的代码是否有问题

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,非常感谢您的回答@如果解决了这个问题,你应该把我们的答案看作是“被接受的”。