【发布时间】:2017-06-19 14:04:06
【问题描述】:
我正在尝试创建一个 VBA 脚本,该脚本将选择多个工作表,然后将这些工作表导出为 PDF。我对编码仍然很陌生,但我对 PDF 部分的编码很好(让它在单个选项卡上工作)。我遇到问题的地方是选择多个工作表。我正在使用动态数组来查看工作表名称并确定是否选择它。一切正常,直到我到达选择工作表的部分。我得到一个运行时错误'9':下标超出范围。我在我的代码中放了几个 Debug.Prints 并且确实看到我的数组包含工作表名称。下面是我的代码。
Sub pdf_Print()
Dim c As Integer
Dim d As Integer
Dim size As Integer
Dim i As Integer
Dim s As Integer
Dim wba As Workbook
Dim wa As Worksheet
Dim b As Integer
Set wba = ActiveWorkbook
'Debug prints active workbook name for Debugging
Debug.Print wba.Name
'Gets number of tabs to print
size = GetPrintTabs(wba)
'Setup Array for tabs to print
Dim Sheetstoprint() As Variant
ReDim Sheetstoprint(0 To size)
'Debug print Array size
Debug.Print size
'Stores tab names in Array
For Each wa In ActiveWorkbook.Worksheets
If (wa.Name Like "*segment*" And wa.Visible = True) Then
Sheetstoprint(i) = wa.Name
i = i + 1
Debug.Print Sheetstoprint(i)
End If
Next wa
'Debug to ensure show which tabs are in Array
For b = LBound(Sheetstoprint) To UBound(Sheetstoprint)
Debug.Print Sheetstoprint(b)
Next
'Select sheets in Array
ActiveWorkbook.Worksheets(Sheetstoprint).Select
End Sub
Public Function GetPrintTabs(awb As Workbook) As Integer
Dim wsa As Worksheet
Dim i As Integer
For Each wsa In awb.Worksheets
If (wsa.Name Like "*segment*" And wsa.Visible = True) Then
i = i + 1
End If
Next wsa
GetPrintTabs = i
Debug.Print "size =" & i
End Function
【问题讨论】:
-
半疯狂猜测:将 ReDim Sheetstoprint(0 To size) 更改为 ReDim Sheetstoprint(1 To size)
-
你太棒了。那行得通。我花了 2 天时间,完全错过了。谢谢。
-
这是一个我习惯于捕捉的错误,因为它经常出现在我自己的努力中。 ;-) 很高兴它有帮助。
标签: arrays vba excel worksheet-function