VBA数据录入窗体新增数据无法写入指定结构化表格内部问题咨询
问题原因
现有代码通过B列最后非空单元格行号+1计算写入位置,是针对普通工作表区域的逻辑,没有和名为tbTabla2的结构化表格(ListObject)绑定,当Excel未自动触发表格范围扩展时,新增数据就会写到表格区域外。
解决方案
直接操作结构化表格对象,调用VBA内置的ListRows.Add方法在表格末尾新增行,写入的数据会自动纳入表格范围,自动继承表格的格式、数据校验和列公式,不需要手动计算行号。
修改后的WriteDataToSheet过程代码如下:
Private Sub WriteDataToSheet() Dim targetTable As ListObject Dim newRow As ListRow ' 绑定工作表上的目标表格 Set targetTable = Sheet1.ListObjects("tbTabla2") ' 在表格数据区域末尾新增空行 Set newRow = targetTable.ListRows.Add ' 按表格列顺序写入窗体控件的值 With newRow .Range(1, 1).Value = textboxNewDate.Value .Range(1, 2).Value = textboxNameNew.Value .Range(1, 3).Value = textboxNewEquipment.Value .Range(1, 4).Value = textboxNewTech.Value .Range(1, 5).Value = textboxNewCot.Value .Range(1, 6).Value = textboxNewPrice.Value .Range(1, 7).Value = textboxNewFac.Value .Range(1, 8).Value = textboxNewStatusF.Value .Range(1, 9).Value = textboxNewServ.Value .Range(1, 10).Value = textboxNewEnt.Value .Range(1, 11).Value = textboxNewDesc.Value .Range(1, 12).Value = textboxNewStatus.Value End With End Sub
按钮点击事件和独立模块里的GetType函数不需要修改,可以直接复用。
补充说明
- 代码中
.Range(1, 列号)的列序号是相对于表格自身的列顺序,不是工作表的列序号,哪怕表格不是从A列开始,也不会出现列错位问题。 - 这种写法不会受表格下方空单元格、残留格式影响,永远会把数据写入表格内部。
内容的提问来源于stack exchange,提问作者aurora
相关产品推荐
相关产品推荐

