我已经具有条形码扫描仪的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
答案 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。如果这样会导致问题,请在我的代码中用> =代替=。
该代码会将扫描内容添加到现有数量中,就像您拥有的一样,并在文本框中指示新的总计(以备您感兴趣)。您可以将其替换为“确定”。代码将选择输入的文本。因此,当您输入其他内容(例如新扫描)时,它将被覆盖,而无需额外的点击。