Трудно сказать, что у тебя есть. Например, кто нажимает кнопку? Или ваш сканер вводит возврат. Я думаю, что код ниже должен работать при любых обстоятельствах. Пожалуйста, попробуйте.
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
, чтобы определить, когда обрабатывать данные. Это связано с тем, что событие Изменить будет происходить всякий раз, когда вводится хотя бы один символ. Я тестировал с 3 персонажами. Измените число на значение, равное длине номеров, которые вы сканируете. Теоретически это все еще оставляет зависание CR, которое также может отправлять ваш сканер. Если это вызывает проблему, поэкспериментируйте с> = вместо = в моем коде.
Код добавит отсканированное изображение к существующему количеству, так же, как оно было у вас, и укажет новый итог в текстовом поле. В случае, если вы заинтересованы. Вы можете заменить это на «ОК». Код выберет текст, который он вводит. Поэтому, когда вы вводите что-то еще, например, новое сканирование, оно будет перезаписано без дополнительных кликов.