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
相关产品推荐
相关产品推荐

