我有一些代码编写,根据用户是否选择复选框将工作表构建为字符串列表,以便包含在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
- 然而,这不允许我保持它是变量。
Windows("WindowName").Activate
,但无论如何都会得到相同的错误。 - SincereApathySheet11
或者有引号的工作表名称,例如:"Cost Analysis"
。最终通过使用没有引号的工作表名称Cost Anaylsis
成功解决了问题。很抱歉,在我的示例中我应该使用实际的名称,但是我认为如果我将工作表编号用作工作表名称,这样会更容易理解。感谢您的帮助,我从中学到了一课。 - SincereApathy