简体   繁体   中英

VBA Excel “Object Required” error

My codes gives me a Object Required 424 error on this line:

lngRow = .Cells(.Rows.Count, 1).End(xlUp).Row

My full code:

Private Sub Worksheet_Change(ByVal Target As Range)
'    If Target.Count > 1 Then Exit Sub
'    If Target.Column > 2 Then Exit Sub

    Application.EnableEvents = False

    If Target.Column = 6 Then
        If Target.Offset(0, 1).Value <> "" Then
            MsgBox "You must only fill in one of the two columns"
            Target.ClearContents
            GoTo ExitSub
        End If
    End If

    If Target.Column = 7 Then
        If Target.Offset(0, -1).Value <> "" Then
            MsgBox "You must only fill in one of the two columns"
            Target.ClearContents
            GoTo ExitSub
        End If
    End If

    Dim arrData() As Variant
    Dim i As Long
    Dim lngRow As Long
    Dim myNum As Variant
    Dim ws As Worksheet
    myNum = Target.Value

    If Target.Column = 6 Then
    With BogieInspectionPoints 'this is a sheet name
        lngRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        arrData = .Range("a1:b" & lngRow)
    End With
    End If

    If Target.Column = 7 Then
    With WagonInspectionPoints 'this is a sheet name
        lngRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        arrData = .Range("a1:b" & lngRow)
    End With
    End If

    For i = 1 To lngRow
        If myNum = arrData(i, 1) Then
            Cells(Target.Row, 8).Value = arrData(i, 2)
            Exit For
        End If
    Next

    ExitSub:
    Application.EnableEvents = True

    End Sub

It looks like those sheet variables aren't set.

You will need to add this at the top.

Dim BogieInspectionPoints as Worksheet
Dim WagonInspectionPoints as Worksheet

Set BogieInspectionPoints = ActiveWorkbook.Sheets("BogieInspectionPoints")
Set WagonInspectionPoints = ActiveWorkbook.Sheets("WagonInspectionPoints")

I was assuming there was other code. When you add this line all the With statements should process correctly using the code you posted.

What you're doing with the With statements is shorthanding the object. Instead of writing

BogieInspectionPoints.Range("A1")

'More code

You can write

With BogieInspectionPoints
 .Range("A1")
End With

It keeps you from having to write the full object name out.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM