我编写了一些代码来构建字符串中的工作表列表,具体取决于用户是否选中了复选框以在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 = "" })
- 但是,这并不允许我保持变量。
答案 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
中没有空格,因为我的工作表名称没有空格。