VBA使用UsedRange.Rows.Count时触发Error 9:下标越界问题
VBA下标越界(Error 9)问题排查与解决
问题背景
宏功能为:在「Daily Email」工作表F列输入"AG"/"CL"并保存后,将当前编辑行剪切粘贴到「AG Mtg Archive」或「Client Mtg Archive」工作表底部。此前运行正常,现触发下标越界(Error 9),报错指向代码行:
H = Worksheets("Daily Email").UsedRange.Rows.Count
已尝试重命名变量、修改变量类型为Integer,问题未解决。
核心原因与解决步骤
1. 确认目标工作表存在且名称完全匹配
- 检查当前工作簿中是否存在**「Daily Email」**工作表,注意名称的中英文、空格、大小写需完全一致(Excel工作表名称不区分大小写,但VBA引用时需和实际名称完全匹配)
- 若工作表被隐藏,先取消隐藏(右键工作表标签→取消隐藏)后重试
- 若工作表被误重命名,改回原名称,或直接修改代码中的工作表名称为当前实际名称
2. 限定工作簿引用范围
原代码未指定工作簿,可能误引用其他打开的工作簿。修改代码为明确指向当前宏所在工作簿:
H = ThisWorkbook.Worksheets("Daily Email").UsedRange.Rows.Count
3. 替换UsedRange为更可靠的行计数方式
UsedRange可能因工作表残留格式导致行计数异常,改用按列F定位最后一行:
H = ThisWorkbook.Worksheets("Daily Email").Cells(Rows.Count, "F").End(xlUp).Row
4. 排查工作表保护状态
若「Daily Email」工作表被保护,取消保护(审阅→撤销工作表保护)后再运行宏。
内容的提问来源于stack exchange,提问作者swl23
相关产品推荐
相关产品推荐

