不需要值时 If 语句上的对象变量错误
Object Variable error on an If statement when no value is required
我对以下代码有疑问
TestCheck:
Dim Comm as Range
Dim TestComment as Range
Application.EnableEvents = False
Set TestComment = Intersect(Application.ActiveSheet.Range("I:I"), Target)
On Error GoTo Cancellation
If TestComment = "" Then
Else
For Each Comm In TestComment
If Not VBA.IsEmpty(Comm.Value) Then
Comm.Offset(0, 1).Value = Date
Comm.Offset(0, 1).NumberFormat = "dd/mm/yyyy"
Application.EnableEvents = True
End If
Next
End If
一直报错
'Object variable or with block variable not set'
在 If 语句上
If TestComment = "" Then
我知道它什么都不等于所以它吓坏了,但我不介意它什么都不等于,事实上在那种情况下 id 如果它什么都不等于它什么都不做而不是抛出错误。 On Error GoTo 似乎也不起作用。
如果 Target 不在列 I
中,函数 Intersect
将 return Nothing
,因此 TestComment
设置为 Nothing
.
您无法检查 Nothing
的值,您需要检查它是否设置为某些内容,您可以为此使用 is Nothing
。
我假设您的代码是事件例程的一部分。请注意,您不应该设置
EnableEvents
在代码仍在运行时设置为 True - 将其放在代码的末尾(在标签 Cancellation
后面)以确保即使发生错误也能执行。
Application.EnableEvents = False
On Error GoTo Cancellation
Dim testComment As Range, comm As Range
Set testComment = Intersect(Range("I:I"), Target)
If Not testComment Is Nothing Then
For Each comm In testComment
If Not IsEmpty(comm.Value) Then
comm.Offset(0, 1).Value = Date
comm.Offset(0, 1).NumberFormat = "dd/mm/yyyy"
End If
Next
End If
Cancellation:
Application.EnableEvents = True
我对以下代码有疑问
TestCheck:
Dim Comm as Range
Dim TestComment as Range
Application.EnableEvents = False
Set TestComment = Intersect(Application.ActiveSheet.Range("I:I"), Target)
On Error GoTo Cancellation
If TestComment = "" Then
Else
For Each Comm In TestComment
If Not VBA.IsEmpty(Comm.Value) Then
Comm.Offset(0, 1).Value = Date
Comm.Offset(0, 1).NumberFormat = "dd/mm/yyyy"
Application.EnableEvents = True
End If
Next
End If
一直报错
'Object variable or with block variable not set'
在 If 语句上
If TestComment = "" Then
我知道它什么都不等于所以它吓坏了,但我不介意它什么都不等于,事实上在那种情况下 id 如果它什么都不等于它什么都不做而不是抛出错误。 On Error GoTo 似乎也不起作用。
如果 Target 不在列 I
中,函数 Intersect
将 return Nothing
,因此 TestComment
设置为 Nothing
.
您无法检查 Nothing
的值,您需要检查它是否设置为某些内容,您可以为此使用 is Nothing
。
我假设您的代码是事件例程的一部分。请注意,您不应该设置
EnableEvents
在代码仍在运行时设置为 True - 将其放在代码的末尾(在标签 Cancellation
后面)以确保即使发生错误也能执行。
Application.EnableEvents = False
On Error GoTo Cancellation
Dim testComment As Range, comm As Range
Set testComment = Intersect(Range("I:I"), Target)
If Not testComment Is Nothing Then
For Each comm In testComment
If Not IsEmpty(comm.Value) Then
comm.Offset(0, 1).Value = Date
comm.Offset(0, 1).NumberFormat = "dd/mm/yyyy"
End If
Next
End If
Cancellation:
Application.EnableEvents = True