Excel VBA动态选择工作表导出PDF时出现下标越界错误求助
问题原因
你遇到的Runtime Error '9'是因为错误地将拼接好的字符串当成了数组元素。硬编码时Array("Volume Report","Notes","Invoice01")是创建一个包含3个独立字符串的数组,但你动态生成的sheetNames是一个完整的长字符串(比如"Volume Report","Notes","Invoice01"),传入Array(sheetNames)后得到的是仅含1个元素的数组——这个元素就是整个长字符串,Excel找不到对应名称的工作表,自然触发下标越界。
修正后的代码
直接构建工作表名称数组,而非拼接字符串:
Sub ExportAsPDF() Dim wb As Workbook Dim currentSheet As Worksheet Dim filePath As String Dim sheetNames() As String ' 改为字符串数组类型 Dim cell As Range Dim i As Integer Set wb = ActiveWorkbook Set currentSheet = ActiveSheet ' 构建文件路径 filePath = wb.Path & "\" & "0_" & Range("Notes_Revision").Value & ") " & Range("Notes_JobName").Value & " - VR - " & Range("Notes_Author").Value & ".pdf" ' 从Ref_PrintRange收集工作表名称到数组 i = 0 ReDim sheetNames(Range("Ref_PrintRange").Cells.Count - 1) ' 根据范围大小初始化数组 For Each cell In Range("Ref_PrintRange") sheetNames(i) = cell.Value i = i + 1 Next cell ' 选择指定工作表 Sheets(sheetNames).Select ' 导出为PDF ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=filePath, _ Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False ' 恢复原工作表选中状态 currentSheet.Select End Sub
关键修改点
- 将
sheetNames从字符串类型改为字符串数组sheetNames() As String - 根据
Ref_PrintRange的单元格数量初始化数组大小,避免数组越界 - 循环时直接将每个单元格的工作表名称存入数组对应位置,无需拼接引号和逗号
- 调用
Sheets(sheetNames).Select时,直接传入数组即可,无需再套Array()
内容的提问来源于stack exchange,提问作者Bryce
相关产品推荐
相关产品推荐

