Excel VBA-运行时错误13类型不匹配

Excel VBA-运行时错误13类型不匹配,vba,excel,spreadsheet,Vba,Excel,Spreadsheet,我正在创建一个任务列表样式的excel工作表,其中人员被分配了任务,并且可以将该工作表用作进度跟踪器 一旦任务完成,一个人会将其标记为已完成,工作表会弹出一个消息框,询问是否需要更改参考号 但是,当我按完成任务的人员进行筛选,并尝试为新任务添加新行时,我得到运行时错误13类型不匹配。我认为这是因为我的VBA不断检查要完成的任务的状态,所以当您创建一个空行时,状态列中没有任何内容 下面是用错误消息突出显示的代码 Private Sub Worksheet_Change(ByVal Target A

我正在创建一个任务列表样式的excel工作表,其中人员被分配了任务,并且可以将该工作表用作进度跟踪器

一旦任务完成,一个人会将其标记为已完成,工作表会弹出一个消息框,询问是否需要更改参考号

但是,当我按完成任务的人员进行筛选,并尝试为新任务添加新行时,我得到运行时错误13类型不匹配。我认为这是因为我的VBA不断检查要完成的任务的状态,所以当您创建一个空行时,状态列中没有任何内容

下面是用错误消息突出显示的代码

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim answer
    If Not Intersect(Target, Range("H5:H1000")) Is Nothing Then
        If (Target.Value) = "Completed" Then
            answer = MsgBox("Do you need to add a change reference?", vbYesNo + vbQuestion, "Change      Reference Reminder")
            If answer = vbYes Then
                MsgBox "Add in the column to the right", , ("Change Reference Tip")
            Else
                'do nothing'
            End If
        End If
    End If
End Sub

这里发生了一些事情;太多,无法在评论中描述

  • 首先,
    工作表\u Change
    工作表宏由事件触发,特别是当一个或多个单元格的内容发生更改时。如果希望在插入行时避免繁重的处理(随后更改许多单元格的值),则需要在
    Target
    不止一个单元格时将其踢出。通常,如果Target.cells.count>1,则包括
    ,然后退出sub
    ,因为第一行足以完成此操作。这一点尤其重要,因为您希望将单个已更改单元格的值与已完成的值进行比较
  • 您所提供的代码实际上并没有改变任何东西,但在某种程度上它看起来会有所改变。为了使更改单元格的值不会启动相同的
    工作表\u Change
    事件maco的第二次迭代(随后尝试在其自身上运行),您需要暂时停止事件处理,并在离开宏之前重新启动它
  • 如果关闭事件,则需要进行错误处理,以便在发生错误时重新打开事件。编写得最好的代码过程可能会发生错误,您希望捕获错误并将其报告到诸如立即窗口之类的地方,然后在安全退出事件宏之前重新启用事件处理
  • 次要的一点是,在我的布尔条件表明我将实际使用变量之前,我从未对变量进行过
    Dim
  • 考虑到这3½点,提供的示例代码可能会更好

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
        If Target.Cells.Count > 1 Then Exit Sub
        If Not Intersect(Target, Range("H5:H1000")) Is Nothing Then
            On Error GoTo Erreur
            Application.EnableEvents = False
            If LCase(Target.Value) = "completed" Then
                Dim answer As Variant
                answer = MsgBox("Do you need to add a change reference?", vbYesNo + vbQuestion, "Change      Reference Reminder")
                If answer = vbYes Then
                    MsgBox "Change references are added in the column to the right." _
                      & Chr(10) & Chr(10) & "Let's go there now.", vbOKOnly, "Change Re ference Tip"
                    Target.Offset(0, 1).Activate
                Else
                    'do nothing'
                End If
            End If
        End If
        GoTo Fìn
    Erreur:
        Debug.Print Err
    Fìn:
        Application.EnableEvents = True
    End Sub
    

    我添加了一行代码,将用户移动到触发事件的单元格右侧的单元格中。

    Active.Sheet
    ?那意味着什么?VBA应该从memory.Command中告诉您发生问题的行号,但不执行任何操作^^^在哪一点添加额外的行?很抱歉,我错误地将active.sheet留在了中。这应该是一个“无所事事”的评论。我根据任务所属人员的姓名过滤任务列表,当我尝试添加另一行以添加另一个任务时,该行为空,这会给我一条错误消息,并突出显示VBAI测试代码中的“If(Target.Value)=“Completed”Then“行。它按预期运行,没有错误。无法重现您的问题。