使用VBA通过用户窗体插入数据:父级作业行定位异常问题
父级作业插入位置错误的VBA修复
问题背景
现有三列数据:父级作业(A列)、子级作业(B列)、详情(C列)。需求为:父级作业填在A列,对应子级作业依次插入到B列的新行(A列留空),父级和子级的C列均填写详情。通过UserForm的两个按钮分别插入父级、子级数据,但父级插入功能异常:多次点击「注册父级作业」时,新父级会填充到最后一个原有父级的下一行,而非最后一个子级的下方行,不符合预期;子级插入功能正常。
原代码逻辑缺陷:定位插入行时仅以A列的最后非空行为基准,但子级作业的A列是空的,导致A列的最后非空行始终停留在最后一个父级的行,无法定位到真正的最后数据行。
修正后的VBA代码
Private Sub btn_registerChildJob_Click() Application.DisplayAlerts = False ' 以C列(详情列)定位最后数据行,因为父级/子级的C列都有值 Dim lastRow As Long lastRow = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Row Cells(lastRow, 1) = "" Cells(lastRow, 2) = " " & TextBox2.Text ' 用&代替+避免文本/数值拼接错误 Cells(lastRow, 3) = "Test Data" ActiveWorkbook.Save Application.DisplayAlerts = True End Sub Private Sub btnResgiterParentJob_Click() Application.DisplayAlerts = False Dim lastRow As Long lastRow = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Row With Cells(lastRow, 1) .Font.Bold = True .Font.Color = vbRed .Value = TextBox1.Text End With Cells(lastRow, 3) = "Test Data" Application.DisplayAlerts = True ' 补充遗漏的提示恢复语句 End Sub
关键修改说明
- 插入行定位逻辑:改用C列(详情列)作为基准,因为父级和子级的C列都会填写内容,能准确找到整个数据区域的最后一行,避免因A列空值导致的定位错误。
- 字符串拼接优化:子级作业的文本拼接用
&代替+,避免当TextBox内容为数值时出现运算错误。 - 代码完整性:父级按钮的代码补充了
Application.DisplayAlerts = True,避免关闭提示后未恢复系统默认状态。
内容的提问来源于stack exchange,提问作者Habeeb E Sadeed
相关产品推荐
相关产品推荐

