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

Excel表格查找首可用空行的VBA方法失效,请求修复

解决ListObject插入数据至末尾的问题

你的核心问题是混淆了工作表行号与ListObject内部行索引,直接用工作表行号定位DataBodyRange的行必然出错。ListObject自带原生方法处理新增行,无需手动查找最后一行。

修正后的代码

Private Sub but_spl2addweld_Click()
    Dim tbl As ListObject
    Set tbl = ThisWorkbook.Sheets("PL2_steel").ListObjects("Tbl_spl2weldings")
    
    Dim newRow As ListRow
    ' 直接在表格末尾插入新行
    Set newRow = tbl.ListRows.Add(AlwaysInsert:=True)
    
    If Me.Combo_SPL2weldoptions.Value = "Option 1_ Base material-Filler material" Then
        newRow.Range(1).Value = "pl2.St." & Me.txt_SPL2code.Value
        newRow.Range(2).Value = Me.Txt_spl2weldid.Value
        newRow.Range(3).Value = Me.Combo_SPL2weldoptions.Value
    End If
End Sub

关键修正说明

  • 用ListRows.Add方法直接在表格末尾添加新行,这是ListObject的标准操作,比手动找行更稳定可靠
  • 通过ListRow.Range访问新行单元格,索引对应表格内的列位置(第一列用1,第二列用2,以此类推)
  • 移除多余的工作表行号计算,彻底避免行号混淆问题

原代码出错原因

原代码中Ir是工作表的绝对行号(比如表头在第3行,最后一行数据在第10行,Ir就是10),但DataBodyRange(Ir + 1, 1)是取表格数据区域的第11行——而表格数据区域的第一行对应工作表第4行,这就会导致定位到表格外区域,或错误覆盖已有行。

内容的提问来源于stack exchange,提问作者shahin syr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:32:10