选择多个Excel表格导出为PDF

时间:2016-02-20 17:23:17

标签: excel vba excel-vba pdf

我编写了一些代码来构建字符串中的工作表列表,具体取决于用户是否选中了复选框以在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,并且工作表周围有双引号。

我已经在这里和其他地方查看了其他问题和代码示例,这些问题和代码示例显示了同样的目标,并且我完全按照它们使用选择行并且我将下标列出来范围错误。 (我还验证了所有内容拼写正确)

附加说明如果我尝试直接在其中键入字符串值,则可以使用@Html.ActionLink(item.ArticleTitle, "Details", new { id = item.ArticleId,title=item.ArticleTitle.Replace(' ', '-'), Area = "" }) - 但是,这并不允许我保持变量。

1 个答案:

答案 0 :(得分: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中没有空格,因为我的工作表名称没有空格。