MICROSOFT

EP05. “Subscript Out of Range 下标超出范围错误”

首页 Microsoft 工具 Excel · VBA · Macro Errors · EP05
约 4 分钟· #EP05#Excel#Macro Errors
🔒 登录后可标记已读
  • 明明代码没打错字,宏却报「Subscript out of range」(运行时错误 9)——因为引用的工作簿、工作表或数组元素根本不存在
  • 三种最常踩的场景:引用没打开的工作簿、指定不存在的工作表编号、数组下标超出声明范围
  • 每种解法都一样简单:先确认这个东西真的存在,或把范围/编号改对
  • 前置知识:基本的集合(Workbooks/Worksheets)和数组概念

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


场景一:引用没打开的工作簿

Workbooks("sales.xlsm").Close

如果 "sales.xlsm" 这份文件根本没打开,就会报错。解法:执行这行之前先确认该工作簿已经打开。

[截图:运行代码后弹出的 "Run-time error '9': Subscript out of range" 报错对话框]


场景二:引用不存在的工作表

假设工作簿里只有 3 张工作表:

Worksheets(4).Range("A1").Value = "Hello"

引用第 4 张工作表会报错,因为根本不存在。解法:把编号改成 1、2、3 之间,或者先新增一张工作表。


场景三:数组元素超出范围

Dim Films(1 To 5) As String

Films(1) = "Lord of the Rings"
Films(2) = "Speed"
Films(3) = "Star Wars"
Films(4) = "The Godfather"
Films(5) = "Pulp Fiction"

MsgBox Films(6)

数组只声明了 1 到 5,引用 Films(6) 会报错。解法:只引用 1 到 5 之间的编号,或者把数组声明得更大。


学完你会

  • ✅ 认出 Subscript out of range 错误的三种典型触发场景
  • ✅ 引用工作簿、工作表、数组编号之前,先确认它们真的存在
  • ✅ 分辨这个错误跟死循环等其他 VBA 错误的差别

常见错误

  • 引用工作簿/工作表/数组之前,没有先确认这个对象或编号实际存在
  • 数组或工作表数量后来改变了(增删),代码里写死的编号数字没有跟着更新
  • 把这个错误跟 EP04 提到的「无限循环」等其他常见 VBA 错误搞混,排查方向找错

Sources

Blog / Website:

  1. Subscript Out of Range