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
相关产品推荐
相关产品推荐

