Question

I am trying to execute a search where it searches through a column for "REQM" (no quotes) and set the range of the found cell to d. Then call another sub function that finds where to enter the data into. My FindEntryArea sub function works fine and my first find works great but when it tries to findnext it is not working properly.

Sub FindLoop()
Dim re as Range
Set re = Sheets(1).Range("T:T")

With re
    Set d = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole)
    MsgBox (d.Row)
    Call FindEntryArea
    Do
        Set d = .FindNext(d)
        MsgBox (d.Row)
        Call FindEntryArea
    Loop While Not d Is Nothing
End With


End Sub

Trying to figure out the error I used msgbox to print out the row of the range that was being found this worked fine for the first cell but did not work for the findnext. I get object variable or with block variable not set. I am fairly new to VBA and this is my first time using findnext so any guidance would be appreciated. Also re is my range and there are plenty of other cells that should be found within it.

Thanks.

EDIT:

Main code and findloop

Public re As Range
Public d As variant
Sub MainCode()

Dim r as Range
Set re = Worksheets("Summary all PIIDB").Range("T:T")

Set r = Worksheets("Summary all PIIDB")
With r
    Call FindLoop
End With
End Sub

Sub FindLoop()

With re
    Set d = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole)
    MsgBox (d.Row)
    'Call FindEntryArea
        Set d = .FindNext(d)
        MsgBox (d.Row)
        'Call FindEntryArea
End With


End Sub

I removed the loop just to get findnext working first and yet I am still struggling.

Was it helpful?

Solution

The issue is that you never set the variable "re" or "c" to anything. You really should declare all of your variables before using them to help reduce bugs. Try something like this:

Sub FindLoop()
    Dim prevSheet as Worksheet
    Dim rng As Range
    Dim fnd As Variant
    Dim i As Long

    prevSheet = ActiveSheet
    Sheets(1).Select

    'Column T - UsedRange
    Set rng = Sheets(1).Range(Cells(1, 20), Cells(ActiveSheet.UsedRange.Rows.Count, 20))

    On Error GoTo Not_Found
    i = rng.Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole).Row
    On Error GoTo 0

    With rng
        Set fnd = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole)
        Do
            Set fnd = .FindNext(fnd)
            Call FindEntryArea
            MsgBox (fnd.Row)
        Loop While i < fnd.Row
    End With
    prevSheet .select

    Exit Sub

Not_Found:
    MsgBox """REQM"" not found."
    prevSheet.Select
    Exit Sub
End Sub

Edit: I modified the code you posted and it runs correctly for me.

Option Explicit
Public d As Variant
Public re As Range

Sub MainCode()

    Dim r As Range
    Set re = Worksheets("Summary all PIIDB").Range("T:T")

    Set r = Worksheets("Summary all PIIDB").UsedRange
    With r
        Call FindLoop
    End With
End Sub

Sub FindLoop()
    On Error GoTo Not_Found
    With re
        Set d = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole)
        MsgBox (d.row)
        'Call FindEntryArea
        Set d = .FindNext(d)
        MsgBox (d.row)
        'Call FindEntryArea
    End With
    On Error GoTo 0
    Exit Sub

Not_Found:
    MsgBox ("REQM not found!")
    Exit Sub
End Sub
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top