Excel 中的兼容性错误 2003 - 2016 宏



关于一些VBA的快速查询。我最近从Excel 2003迁移到2016(365(,并且传输代码时存在问题。

我有一个单元格,您可以在其中输入数字。当您在编辑单元格后按 Enter 时,它会将该值添加到右侧的单元格 2 个单元格中,并保留计数。然后,它会擦除原始单元格中的值。

Sub CasesChecked()
    If Sheets("Work Return").Range("F13") = "" Then
        Sheets("Work Return").Unprotect "adminstats"
        Sheets("Work Return").Range("F13") = Sheets("Work Return").Range("D13")
        Sheets("Work Return").Range("D13") = ""
        Sheets("Work Return").Protect "adminstats"
    Else
        Sheets("Work Return").Unprotect "adminstats"
        Sheets("Work Return").Range("F13") = Sheets("Work Return").Range("F13") + Sheets("Work Return").Range("D13")
        Sheets("Work Return").Range("D13") = ""
        Sheets("Work Return").Protect "adminstats"
    End If
End Sub

上面的代码可以在模块 1 中找到,在工作表 1 中有下面的代码。这通过相交确认细胞变化:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("D13")) Is Nothing Then
    CasesChecked
    Else
    If Not Intersect(Target, Target.Worksheet.Range("D17")) Is Nothing Then
    CasesChecked2
    Else
    End If
    End If
End Sub

不幸的是,我得到了可怕的"运行时错误'-2147417848对象_worksheet失败的方法范围",并且无法弄清楚原因。代码很简单,我不知道它在哪里动摇。

任何建议将不胜感激

谢谢

莱恩

我会先进行此更改,然后再试一次:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("D13")) Is Nothing Then
        Application.EnableEvents = False
            CasesChecked
        Application.EnableEvents = True
    Else
        If Not Intersect(Target, Target.Worksheet.Range("D17")) Is Nothing Then
            Application.EnableEvents = False
                CasesChecked2
            Application.EnableEvents = True
        Else
        End If
    End If
End Sub

编辑#1:

在原始代码中,Worksheet_Change()响应用户发起的更改。 但它也回应了CasesChecked()所做的改变。

这造成了恶意循环。 新代码避免了这种情况。

最新更新