Система ввода/вывода штрих-кодов Excel и Visual Basic

#excel #vba #timestamp #barcode

#превосходить #vba #отметка времени #штрих-код

Вопрос:

Я использую visual basic для создания системы оформления заказа на листе Excel. Лист будет заполнен информацией для проекта, каждый из проектов требует, чтобы мы отправили комплект. Этот лист Excel позволит сканировать штрих-код, когда это произойдет, он проверяет время «выхода». Когда этот штрих-код сканируется снова, он показывает время «в». Проблема, с которой я сталкиваюсь, заключается в том, что если этот штрих-код будет отсканирован в третий раз, он обновит только время выхода.

Как мне настроить его так, чтобы он видел, что было записано время «вход» и «выход», и, таким образом, перейдите в следующую пустую ячейку в строке и добавьте штрих-код новое время «вход» или «выход». Любая помощь будет очень признательна!

Это код, который я использую.

Код для на рабочем листе

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.Range("B2")) Is Nothing Then  Application.EnableEvents = False  Call inout  Application.EnableEvents = True  End If  End Sub  

код для макроса

 Sub inout()  Dim barcode As String  Dim rng As Range  Dim rownumber As Long   barcode = Worksheets("Sheet1").Cells(2, 2)   Set rng = Sheet1.Columns("a:a").Find(What:=barcode, _  LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _  SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)  If rng Is Nothing Then  ActiveSheet.Columns("a:a").Find("").Select  ActiveCell.Value = barcode  ActiveCell.Offset(0, 1).Select  ActiveCell.Value = Date amp; " " amp; Time  ActiveCell.NumberFormat = "m/d/yyyy h:mm AM/PM"  Worksheets("Sheet1").Cells(2, 2) = ""  Else  rownumber = rng.Row  Worksheets("Sheet1").Cells(rownumber, 1).Select  ActiveCell.Offset(0, 2).Select  ActiveCell.Value = Date amp; " " amp; Time  ActiveCell.NumberFormat = "m/d/yyyy h:mm AM/PM"  Worksheets("Sheet1").Cells(2, 2) = ""    End If  Worksheets("Sheet1").Cells(2, 2).Select    End Sub  

Ответ №1:

Все это содержится в модуле код рабочего листа:

 Option Explicit  Private Sub Worksheet_Change(ByVal Target As Range)  If Not Intersect(Target, Me.Range("B2")) Is Nothing Then  inout 'use of Call is deprecated  End If End Sub   Sub inout()  Dim barcode As String  Dim rng As Range  Dim newRow As Boolean   barcode = Me.Cells(2, 2)   'find the *last* instance of `barcode` in ColA  Set rng = Me.Columns("A").Find(What:=barcode, after:=Me.Range("A1"), _  LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _  SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False)    'figure out if we need to add a new row, or update an existing one  If rng Is Nothing Then  newRow = True 'no matching barcode  Else  'does the last match already have an "in" timestamp?  If Len(rng.Offset(0, 2).Value) gt; 0 Then newRow = True  End If    If newRow Then  Set rng = Me.Cells(Me.Rows.Count, "A").End(xlUp).Offset(1, 0)  rng.Value = barcode  SetTime rng.Offset(0, 1) 'new row, so set "out"  Else  SetTime rng.Offset(0, 2) 'existing row so set "in"  End If    Me.Cells(2, 2).Select End Sub  'set cell numberformat and set value to current time Sub SetTime(c As Range)  With c  .NumberFormat = "m/d/yyyy h:mm AM/PM"  .Value = Now  End With End Sub