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

运行时错误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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:24:10