重点内容
适用版本
桌面版通用(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 之间的编号,或者把数组声明得更大。
学完你会
常见错误
- 引用工作簿/工作表/数组之前,没有先确认这个对象或编号实际存在
- 数组或工作表数量后来改变了(增删),代码里写死的编号数字没有跟着更新
- 把这个错误跟 EP04 提到的「无限循环」等其他常见 VBA 错误搞混,排查方向找错
Sources
Blog / Website: