2015-01-16 206 views
0

我在Excel VBA編碼並獲得錯誤91或對象變量或塊變量未設置錯誤,當我運行我的代碼,我不確定爲什麼。我定義並設置了我的變量,所以我不知道可能導致錯誤的原因。相關的代碼是下面Excel vba對象變量或With塊變量未設置錯誤

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") 

的錯誤是在如果Month.Find(「一月」)<>「」,則該代碼的一部分。

完整的代碼是在這裏:

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 

任何幫助是極大的讚賞。

回答

4

Range.Find返回Range,所以你需要將其評價爲對象:

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

如果您需要返回Range工作,你可以使用這樣的事情:

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

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

參考對於Range.Findhere

+0

[Here some additional references。](http://msdn.microsoft.com/en-us/library/ff839746%28v=office.14%29.aspx) –

+0

@KazJaw良好的調用,編輯後。 –

+0

很高興注意到對象需要設置,而變量不應該。 例如'Set worksheet = Worksheet' v.s. 'X = 4' – timelmer

相關問題