Excel vba 对象变量或 With 块变量未设置错误
Excel vba Object variable or With block variable not set error
我在 excel vba 中编码,当我 运行 我的代码时出现错误 91 或对象变量或 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")
错误在代码的 If Month.Find("jan") <> "" then 部分。
完整代码在这里:
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
非常感谢任何帮助。
Range.Find
returns a 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.Find
的参考是here。
我在 excel vba 中编码,当我 运行 我的代码时出现错误 91 或对象变量或 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")
错误在代码的 If Month.Find("jan") <> "" then 部分。
完整代码在这里:
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
非常感谢任何帮助。
Range.Find
returns a 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.Find
的参考是here。