Excel VBA自动添加表格行遇Run-time error 9下标越界问题求助
解决Run-time error 9 "Subscript out of range"问题
错误原因分析
- ListRows.Add参数非法:当目标表格
LoanTable无任何数据行时,ListRows.Count返回0,此时调用ListRows.Add(intRows)等同于传入参数0,但ListRows.Add的合法位置参数范围是1到ListRows.Count + 1,0属于无效下标,直接触发下标越界错误。 - 数据源引用未限定工作表:代码中
Range("B4")这类写法默认指向当前激活的工作表,若点击按钮时激活的不是输入数据的工作表,会导致数据读取异常(虽不一定直接触发当前错误,但属于不规范写法,易引发其他问题)。
修正后的代码
Private Sub AddNew_Click() Dim myRow As ListRow Dim targetSheet As Worksheet Dim targetTable As ListObject Dim inputSheet As Worksheet ' 替换为你的输入数据所在工作表名称 ' 明确指定目标工作表和表格,避免Active对象的不确定性 Set targetSheet = ThisWorkbook.Worksheets("LoanInfo") Set targetTable = targetSheet.ListObjects("LoanTable") Set inputSheet = ThisWorkbook.Worksheets("输入表") ' 请修改为实际输入数据的工作表名 ' 直接在表格末尾添加新行,无需手动指定位置 Set myRow = targetTable.ListRows.Add ' 从指定工作表读取数据并赋值到新行 myRow.Range(1) = inputSheet.Range("B4").Value myRow.Range(2) = inputSheet.Range("B5").Value myRow.Range(3) = inputSheet.Range("B6").Value myRow.Range(4) = inputSheet.Range("B7").Value myRow.Range(5) = inputSheet.Range("B8").Value myRow.Range(6) = inputSheet.Range("B9").Value myRow.Range(7) = inputSheet.Range("B10").Value End Sub
额外优化建议
- 用
ThisWorkbook替代ActiveWorkbook,确保始终指向代码所在的工作簿,避免切换工作簿时出错。 - 若需要清空输入区域的内容,可在代码末尾添加
inputSheet.Range("B4:B10").ClearContents。
内容的提问来源于stack exchange,提问作者Owen Watkins
相关产品推荐
相关产品推荐

