选择多个Excel工作表导出为PDF

3

我有一些代码编写,根据用户是否选择复选框将工作表构建为字符串列表,以便包含在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",其中工作表周围有双引号。

我查看了其他问题和代码示例,并在这里和其他地方展示了相同的目标,我正在使用与他们完全相同的选择行,但我得到了“下标超出范围”错误。(我还验证了所有拼写是否正确)

附加说明如果我尝试直接键入字符串值,它可以工作 - ThisWorkBook.Sheets("Sheet11, Sheet13, Sheet2").Select - 然而,这不允许我保持它是变量。

1个回答

2
你正在构建一个逗号分隔的字符串,需要将其转换为数组。你已经非常接近了:

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
@SincereApathy 请注意,我在工作表名称的字符串中不包含空格字符。 ..................你的标签名可能不会以空格字符开头!! - Gary's Student
我已经尝试了两种方法,目前已将空格删除。 - SincereApathy
我想通了... 我之前只尝试过没有引号的工作表编号,例如:Sheet11 或者有引号的工作表名称,例如:"Cost Analysis"。最终通过使用没有引号的工作表名称 Cost Anaylsis 成功解决了问题。很抱歉,在我的示例中我应该使用实际的名称,但是我认为如果我将工作表编号用作工作表名称,这样会更容易理解。感谢您的帮助,我从中学到了一课。 - SincereApathy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接