条形码扫描仪自动提交

时间:2020-01-28 02:43:29

标签: excel vba

我已经具有条形码扫描仪的VBA功能,可以识别条形码编号,但是我的问题是每次都必须单击Enter,是否有任何方法可以自动将其存储在特定列中?目前,如果我输入存储在B列中的相同值,它将起作用,它将对C列中的记录进行计数,但我想避免每次都按回车

这是我到目前为止所得到的

Private Sub btnAdd_Click()
Dim TargetCell As Range
If WorksheetFunction.CountIf(Sheets("Sheet1").Columns(2), TextBox1.Value) = 1 Then
    Set TargetCell = Sheets("Sheet1").Columns(2).Find(TextBox1.Value, , xlValues, xlWhole).Offset(0, 1)
    TargetCell.Value = TargetCell.Value + 1
Else
    MsgBox "Code not found"
End If
Me.Hide
End Sub

1 个答案:

答案 0 :(得分:0)

很难说你拥有什么。例如,谁按下按钮?或者,扫描仪是否输入退货单。我认为以下代码在任何情况下都可以工作。请尝试。

Private Sub TextBox1_Change()

    Dim TargetCell As Range
    Dim Qty As Long

    With TextBox1
        If Len(.Value) = 3 Then
            Set TargetCell = Worksheets("Sheet1").Columns(2) _
                            .Find(.Value, , xlValues, xlWhole)
            If TargetCell Is Nothing Then
                MsgBox """" & .Value & """ Code not found"
            Else
                With TargetCell.Offset(0, 1)
                    Qty = .Value + 1
                    .Value = Qty
                End With
                Application.EnableEvents = False
                TextBox1.Value = "Count = " & Qty
                Application.EnableEvents = True
            End If

            .SelStart = 0
            .SelLength = Len(.Value)
        End If
    End With
End Sub

我认为您有一个用户表单,在此表单中,您有一个名为TextBox1的文本框。如果是这样,则该代码应位于用户表单的代码模块中。如果您的工作表中有一个文本框,则将代码粘贴到该文本框所在的工作表的代码模块中。

现在,您需要调整此行代码If Len(.Value) = 3 Then,以确定何时处理数据。这是因为 Change 事件将在每次输入单个字符时发生。我测试了3个字符。将数字更改为与您扫描的数字长度相等的值。理论上,CR仍然悬而未决,扫描仪也可能发送该CR。如果这样会导致问题,请在我的代码中用> =代替=。

该代码会将扫描内容添加到现有数量中,就像您拥有的一样,并在文本框中指示新的总计(以备您感兴趣)。您可以将其替换为“确定”。代码将选择输入的文本。因此,当您输入其他内容(例如新扫描)时,它将被覆盖,而无需额外的点击。