-1

update: This is what i have so far, its supposed to search if an entry exists and if it has an in time, it throws an error 91 on line 3. i want the code to search for preexisting entries and update the time.

Sub inout()
        Dim barcode As String
        Dim rng As Range
        Dim rownumber As Long, ws As Worksheet
    
        Set ws = ThisWorkbook.Worksheets("Sheet1")
    
        barcode = ws.Cells(2, 2).Value
    
        Set rng = ws.Columns("A").Find(What:=barcode, _
                            LookIn:=xlFormulas, LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                            MatchCase:=False, SearchFormat:=False)
        If Not (rng Is Nothing) Or rng.Offset(0, 2) > 0 Then
            'checking out...
            Set rng = ws.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
            rng.Value = barcode
            rng.Offset(0, 1).NumberFormat = "m/d/yyyy h:mm AM/PM"
            rng.Offset(0, 1).Value = Date
            rng.Offset(0, 2).Clear
        ElseIf rng Is Nothing Then
            'checking out...
            Set rng = ws.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
            rng.Value = barcode
            rng.Offset(0, 1).NumberFormat = "m/d/yyyy h:mm AM/PM"
            rng.Offset(0, 1).Value = Date
        Else
            'checking in...
            rng.Offset(0, 1).ClearContents
            rng.Offset(0, 2).NumberFormat = "m/d/yyyy h:mm AM/PM"
            rng.Offset(0, 2).Value = Date
        End If
    
        ws.Cells(2, 2) = ""
    End Sub

this is the layout of the page so far

wben113
  • 1
  • 4

1 Answers1

1

Please review How to avoid using Select in Excel VBA - it will make your code more reliable

Without the Select/Activate:

Sub inout()
    Dim barcode As String
    Dim rng As Range
    Dim rownumber As Long, ws As Worksheet
    
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    barcode = ws.Cells(2, 2).Value

    Set rng = ws.Columns("A").Find(What:=barcode, _
                        LookIn:=xlFormulas, LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                        MatchCase:=False, SearchFormat:=False)
    
    If rng Is Nothing Then
        'checking out...
        Set rng = ws.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
        rng.Value = barcode
        rng.Offset(0, 1).NumberFormat = "m/d/yyyy h:mm AM/PM"
        rng.Offset(0, 1).Value = Date
    Else
        'checking in...
        rng.Offset(0, 1).ClearContents
        rng.Offset(0, 2).NumberFormat = "m/d/yyyy h:mm AM/PM"
        rng.Offset(0, 2).Value = Date
    End If
    
    ws.Cells(2, 2) = ""
End Sub
Tim Williams
  • 154,628
  • 8
  • 97
  • 125