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