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

Excel VBA宏:按A1单元格值格式分类填充至C、D列问题咨询

问题修复说明

你原有代码的核心错误是单元格地址拼接逻辑错误,Range("D2" & ldlr)会把行号直接拼接在D2后面,比如目标行号为3时会生成错误地址D23,而非预期的D3,导致数据写入位置异常。另外代码没有绑定工作表对象、复制粘贴操作冗余,也没有适配扫码枪连续录入的场景。

修正后可运行代码

Sub razdvoji()
    Dim ws As Worksheet
    Dim lastRowC As Long, lastRowD As Long
    
    ' 绑定操作工作表,这里对应你原代码的Skeniranje表,如果你用默认Sheet1可改为"Sheet1"
    Set ws = ThisWorkbook.Worksheets("Skeniranje")
    
    ' 分别获取C、D列最后一行非空行的下一行空白行号
    lastRowC = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row + 1
    lastRowD = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row + 1
    
    ' 匹配B1的校验结果写入对应列
    If ws.Range("B1") = 0 Then
        ' 非库位编码写入D列
        ws.Range("D" & lastRowD).Value = ws.Range("A1").Value
    Else
        ' 匹配到库位编码写入C列
        ws.Range("C" & lastRowC).Value = ws.Range("A1").Value
    End If
    
    ' 清空A1单元格,方便下一次扫码录入
    ws.Range("A1").Value = ""
End Sub

补充优化建议

如果需要实现扫码枪录入完成后自动触发宏,不需要手动点击运行,可以在工作表模块添加如下事件代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 仅当A1单元格内容变更时触发拆分宏
    If Not Intersect(Target, Me.Range("A1")) Is Nothing And Me.Range("A1") <> "" Then
        Call razdvoji
    End If
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:57:04