运行时错误1004:Offset语法修正及用户窗体值插入问题求助
解决VBA插入行及TextBox值写入的1004错误问题
嘿,我来帮你搞定这个VBA的问题!你的代码出现运行时错误1004和无法写入TextBox值,核心问题是Offset的语法用错了,还有对插入后新行的引用逻辑不对。咱们一步步来修正:
错误原因分析
- 你写的
.Cells("F" & Cells.Offset(1, 0).Row)里,Cells没有指定属于ws工作表,而且Offset(1,0)的调用对象不对——你得基于当前找到的行i来定位新插入的行,而不是凭空用Cells.Offset。 Rows(i + 1).Insert没有指定父工作表ws,当Excel激活其他工作表时,这会导致引用错误,触发1004。
修正后的完整代码片段
Dim lastRow As Long Dim i As Long Dim ws As Worksheet ' 先确保ws是你要操作的工作表,比如Sheet1 Set ws = ThisWorkbook.Worksheets("Sheet1") lastRow = ws.Cells(ws.Rows.Count, "F").End(xlUp).Row With ws For i = lastRow To 2 Step -1 ' 匹配TextBox1的内容 If .Cells(i, "F").Value2 = TextBox1.Text Then ' 在第i行下方插入新行,指定父对象ws避免错误 .Rows(i + 1).Insert Shift:=xlDown ' 直接用i+1作为新行的行号,写入TextBox1的值到F列 .Cells(i + 1, "F").Value2 = TextBox1.Text ' 同理,写入J列的内容(这里补全你原来的代码) .Cells(i + 1, "J").Value2 = TextBox2.Text ' 比如假设是TextBox2的值 ' 其他列的写入逻辑依此类推 End If Next i End With
关键修正点
- 所有的
Rows、Cells操作都加上.前缀(因为在With ws块里),确保引用的是目标工作表的单元格,避免跨表引用错误。 - 插入新行后,新行的行号就是
i+1,直接用这个行号来定位单元格,比Offset更直观,也不会出错。 - 注意
ws.Rows.Count要加上ws前缀,不然可能会用当前激活工作表的行数,引发不必要的问题。
这样修改后,应该就能解决1004错误,同时顺利把UserForm里TextBox的值写入新插入的行啦!
内容的提问来源于stack exchange,提问作者micmc
相关产品推荐
相关产品推荐

