【问题标题】:Select Multiple Excel Sheets to Export to PDF选择要导出为 PDF 的多个 Excel 工作表
【发布时间】:2016-06-02 06:42:21
【问题描述】:

我编写了一些代码来根据用户是否选中复选框以将工作表包含在 PDF 报告中来构建字符串中的工作表列表。见下文:

If CheckBox1.Value = True Then
        PDFsheets = "Sheet11"    
End If

If CheckBox2.Value = True Then
    If PDFsheets = "" Then
        PDFsheets = "Sheet13"
    Else
        PDFsheets = PDFsheets & ",Sheet13"
    End If
End If

If CheckBox3.Value = True Then
    If PDFsheets = "" Then
        PDFsheets = "Sheet2"
    Else
        PDFsheets = PDFsheets & ",Sheet2"
    End If
End If

例如,当所有 3 个复选框都被选中时,MsgBox PDFsheets 显示结果Sheet11, Sheet13, Sheet2

现在,当我尝试进行多页选择时,我得到运行时错误 9 - 下标超出范围。我尝试过的不同方法包括:

ThisWorkBook.Sheets(PDFsheets).Select


ThisWorkBook.Sheets(Array(PDFsheets)).Select


xPDF() = Split(PDFsheets, ",")
ThisWorkBook.Sheets(xPDF).Select

xPDF() = Split(PDFsheets, ",")
ThisWorkBook.Sheets(Array(xPDF)).Select

xPDF() = Split(PDFsheets, ",")

For i = 0 to Application.CountA(xPDF) - 1
    Sheets(xPDF(i)).Select
next i

另外,为了简洁起见,我已经使用 ActiveWorkbook 而不是 ThisWorkBook 尝试了上述所有示例。另外,我已经尝试重写我的字符串构建部分以引用工作表名称而不是上面所有示例的数字。因此,结果不是Sheet11, Sheet13, Sheet2,而是"Sheet11", "Sheet13, "Sheet2",并带有双引号。

我已经查看了此处和其他地方的其他问题和代码示例,它们显示了相同的目标,并且我使用的选择行与他们完全一样,并且我得到了下标超出范围错误。 (我还验证了所有内容都拼写正确)

附加说明如果我尝试直接在其中输入字符串值,它可以工作 - ThisWorkBook.Sheets("Sheet11, Sheet13, Sheet2").Select - 但是,这不允许我保持它的可变性。

【问题讨论】:

    标签: vba excel pdf


    【解决方案1】:

    您正在构建一个逗号分隔的字符串,您必须将其转换为数组。你非常接近:

    Sub BuildAString()
        Dim PDFsheets As String
        Dim s As Worksheet
        PDFsheets = "Sheet1,Sheet2,Sheet3"
        ary = Split(PDFsheets, ",")
    
        Sheets(ary).Select
        Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                "C:\TestFolder\Book1.pdf", Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
                True
    End Sub
    

    请注意,这会为所有三张纸制作 1 pdf 文件。如果您想要 3 个单独的文件,您可以使用循环。
    请注意,PDFsheets 中没有空格,因为我的工作表名称没有空格。

    【讨论】:

    • 我仍然得到下标超出范围的错误。我的另一个可能导致问题的想法是工作簿有多个窗口。我尝试在选择行之前为每个不同的窗口添加一个Windows("WindowName").Activate,但无论如何都会得到相同的错误。
    • @SincereApathy 请注意,我在工作表名称字符串中不包含空格字符。 ... ..您的标签名称可能以空格字符开头!
    • 两种方法都试过了,目前已经把空间删掉了。
    • 我想通了...我只尝试了不带引号的工作表编号示例:Sheet11 或带引号的工作表名称示例:"Cost Analysis"。最后通过使用不带引号的工作表名称使其工作...Cost Anaylsis。抱歉,我应该在示例中使用实际名称,但我想如果我使用工作表编号作为工作表名称,它会更容易理解。感谢您的帮助,在这里吸取了教训。
    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 2016-08-04
    • 2016-12-09
    • 2021-09-30
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多