不需要值时 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