关于一些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()
所做的改变。
这造成了恶意循环。 新代码避免了这种情况。