You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA自动添加表格行遇Run-time error 9下标越界问题求助

解决Run-time error 9 "Subscript out of range"问题

错误原因分析

  1. ListRows.Add参数非法:当目标表格LoanTable无任何数据行时,ListRows.Count返回0,此时调用ListRows.Add(intRows)等同于传入参数0,但ListRows.Add的合法位置参数范围是1到ListRows.Count + 1,0属于无效下标,直接触发下标越界错误。
  2. 数据源引用未限定工作表:代码中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 09:12:34