1

I am coding in excel vba and get error 91 or a Object variable or With block variable not set error when i run my code and I am unsure as to why. I define and set my variables so I don't know what could cause the error. The relevant code is below

  Sub Button5_Click()
Dim i As Integer
Dim Month As Range
Dim Avg As Range
Dim Target As Range
Dim Incorrect As Range

Set Month = Range("J19")
Set Avg = Range("H19")
Set Incorrect = Range("A19")
Set Target = Range("M19")

'Range("A" & Rows.Count).End(xlUp).Row
For i = 0 To 1000
If IsEmpty(Avg) Then

If Month.Find("jan") <> "" Then
Set Target = Range("M19")

The error is on the If Month.Find("jan") <> "" then part of the code.

The full code is here:

Sub Button5_Click()
Dim i As Integer
Dim Month As Range
Dim Avg As Range
Dim Target As Range
Dim Incorrect As Range

Set Month = Range("J19")
Set Avg = Range("H19")
Set Incorrect = Range("A19")
Set Target = Range("M19")

'Range("A" & Rows.Count).End(xlUp).Row
For i = 0 To 1000
If IsEmpty(Avg) Then

If Month.Find("jan") <> "" Then
Set Target = Range("M19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("feb") <> "" Then
Set Target = Range("O19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("mar") <> "" Then
Set Target = Range("Q19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("apr") <> "" Then
Set Target = Range("S19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("may") <> "" Then
Set Target = Range("U19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("jun") <> "" Then
Set Target = Range("W19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("jul") <> "" Then
Set Target = Range("Y19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("aug") <> "" Then
Set Target = Range("AA19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("sep") <> "" Then
Set Target = Range("AC19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("oct") <> "" Then
Set Target = Range("AE19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("nov") <> "" Then
Set Target = Range("AG19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

Else
Set Target = Range("AI19")

If IsEmpty(Target) Then
Incorrect.Value = "X"

End If
End If

Else
If Month.Find("jan") <> "" Then
Set Target = Range("N19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("feb") <> "" Then
Set Target = Range("P19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("mar") <> "" Then
Set Target = Range("R19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("apr") <> "" Then
Set Target = Range("T19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("may") <> "" Then
Set Target = Range("V19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("jun") <> "" Then
Set Target = Range("X19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("jul") <> "" Then
Set Target = Range("Z19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("aug") <> "" Then
Set Target = Range("AB19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("sep") <> "" Then
Set Target = Range("AD19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("oct") <> "" Then
Set Target = Range("AF19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

ElseIf Month.Find("nov") <> "" Then
Set Target = Range("AH19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If

Else
Set Target = Range("AJ19")

If IsEmpty(Target) Then
Incorrect.Value = "X"
End If
End If
End If
Set Month = Month.Offset(1, 0)
Set Incorrect = Incorrect.Offset(1, 0)
Set Avg = Avg.Offset(1, 0)
Set Target = Target.Offset(1, 0)

Next i
End Sub

Any help is greatly appreciated.

1

1 Answer 1

5

Range.Find returns a Range so you need to evaluate it as an object:

If Not Month.Find("jan") Is Nothing Then
    Set Target = Range("M19")
End If

If you need to work with the returned Range you can use something like this:

Dim foundCell As Range
Set foundCell = Month.Find("jan")

If Not foundCell Is Nothing Then
    Set Target = Range("M19")
End If

The reference for Range.Find is here.

Sign up to request clarification or add additional context in comments.

2 Comments

It's good to note that objects need to be Set, while vars should not. e.g. Set worksheet = Worksheet v.s. x=4

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.