将多个条形码扫描到单个Excel单元格中,每个单元格都在一个单独的行上

时间:2014-11-23 03:24:50

标签: excel-vba excel-2010 vba excel

图书馆有一张Excel工作表,用作图书的装箱单,可以借给其他图书馆。 每行代表一个打包的单个框。该行的单元格包含收件人,货件编号,箱号等信息。

在其中一列中,他们想要扫描将放在该框中的每本书中的每一本书的条形码“获取编号”,以便每个扫描的编号将显示在该单元格中的新行上。

但是当他们扫描条形码时,Excel会移动到下一行,因为扫描仪被编程为使用CR / LF终止扫描数据。

他们无法重新编程扫描仪,因为它们用于其他应用程序。

我们如何让Excel获得:

If we're in column C
    When Excel detects CR/LF
        If the cell was not empty
            Append a new line to the contents of the cell
        Append the scanned data to the contents of the cell
        Stay in that cell ready for the next scan

然后,如果需要,他们可以按箭头键离开牢房。

- adTHANKSvance

1 个答案:

答案 0 :(得分:0)

大多数人都知道宏代码(包括像 Worksheet_Change 这样的事件宏)会在允许运行的情况下终止.Undo缓冲区但不知道.Undo缓冲区可以在单元格值更改之前被捕获并使用。换句话说,您可以获取新值,强制使用.Undo,然后使用换行符将新值附加到旧值,例如Chr(10)作为分隔符。

右键单击工作表的名称标签,然后选择View Code。当VBE打开时,将以下内容粘贴到标题为 Book1 - Sheet1(Code)的窗格中。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C2:C10")) Is Nothing Then
        On Error GoTo Fìn
        Application.EnableEvents = False
        Dim vNew As Variant
        vNew = Target.Value
        Application.Undo
        If Not IsEmpty(Target) Then
            Target = Target.Value & Chr(10) & vNew
        Else
            Target = vNew
        End If
        'Target.Offset(1,0).Activate
    End If
Fìn:
    Application.EnableEvents = True
End Sub

您没有提供任何细节,所以我想象条形码输入范围为C2:C10。您应该能够将该部分修改为更接近条形码输入的范围。

如果您认为输入范围正确,请点按 Alt + Q 返回工作表。

警告:我没有条形码扫描仪可以使用,但我过去曾使用它们,并且它们总是密切模仿键盘输入(取决于条形码扫描仪软件)。这适用于键盘输入,因此请确保您的扫描仪软件在扫描输出中附加硬回车。如果您想要接受该方法,可以使用注释行来移动一个单元格。