You need to enable JavaScript to run this app. Excel VBA将窗体文本框值写入工作表下一空单元格的代码排查
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA将窗体文本框值写入工作表下一空单元格的代码排查

原有代码的核心问题
  • With代码块完全失效,工作表引用错位
    你写的With ThisWorkbook.Sheets("Folha1")没有起到绑定作用:块内的Range(...)、Rows.Count没有加句点前缀,实际是全局引用,会操作当前激活的工作表而非指定的"Folha1",这是数值写错位置、莫名新增列的核心诱因。
  • 空行定位逻辑完全割裂
    你把空行查找逻辑拆成了两个独立执行的语句,两次End(xlUp)查找没有共享行号结果:
    第一条赋值语句是找A列最后非空行的下一行写入产品名
    第二条赋值语句是找B列最后非空行、再往右偏移1列写入数量
    两个语句没有绑定到同一个空行位置,完全不满足“同一行填两列”的预期。
  • 重复覆盖、无法自动顺延的逻辑漏洞
    你定义了LastRow变量但从未给它赋值、也没拿它做行号定位。每次运行代码时两次查找都是独立计算:如果B列长期为空,Range("B" & Rows.Count).End(xlUp)会直接定位到B1单元格,偏移1列就会写到C列,也就是你看到的“额外生成新列”;如果B列已经有历史数据,就会反复定位到B列的固定最后一行位置写值,自然就会覆盖已有内容、不会顺着A列的空行往下走。
修正后的可运行代码
Private Sub Print_Values_Click()
    ' 非空校验
    If Select_prod.Value = "" Or Select_quant.Value = "" Then
        If MsgBox("Form is not complete. Do you want to continue?", vbQuestion + vbYesNo) <> vbYes Then
            Exit Sub
        End If
    End If

    Dim ws As Worksheet
    Dim LastRow As Long
    
    ' 固定绑定目标工作表,不随激活表变化
    Set ws = ThisWorkbook.Sheets("Folha1")
    
    ' 基于A列查找最后非空行,统一计算出下一个空行的行号
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
    
    ' 在同一空行的A、B列分别写入两个文本框的值
    ws.Cells(LastRow, "A").Value = Select_prod.Value
    ws.Cells(LastRow, "B").Value = Select_quant.Value
End Sub
落地注意事项
  • 所有工作表内的单元格、行、列引用,都必须绑定明确的工作表对象,不能使用无归属的Range、Rows这类全局写法,避免操作到错误的工作表
  • 录入数据前仅需对核心基准列(如A列产品名列)做一次空行查找,拿到统一的行号后再在同一行填充多列内容,不要每填一列就重新执行一次空行查找,否则逻辑一定会混乱
  • 修正原提示语的拼写错误:将"Do you wan to continue?"调整为"Do you want to continue?",避免弹窗提示出现文字错误

内容的提问来源于stack exchange,提问作者Rwolf27

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 11:27:07