【发布时间】:2018-03-22 11:14:03
【问题描述】:
关于一些 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
上面的代码在 Module1 中,在 Sheet1 中有下面的代码。这通过相交确认了单元格的变化:
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 的方法范围失败”,并且无法完全弄清楚原因。代码很简单,不知道哪里出错了。
任何建议将不胜感激
谢谢,
瑞恩
【问题讨论】:
-
CasesChecked2 在哪里??
-
我最好的选择是
Target。它被声明为一个范围,并且在您的代码中编写Target.Worksheet.Range("D17")),它与Range(some_range).Worksheet.Range("D17"))相同。试着弄清楚Target是什么。如果您不知道代码在哪里出错,您可以在第一行添加断点并按 F8 单步执行代码。 -
什么时候你会收到这个错误,在哪里?
-
嗨 @Gary'sStudent 学生 - CasesChecked2 只是 CasesChecked 的副本,位于 CasesChecked 下方的另一个子中。安德烈亚斯-谢谢你的想法! target 在 XP/2003 上运行良好 - 它实际上在这个版本中也运行良好(宏运行良好)但是一旦它完成运行,它会继续刷新,就像卡在一个循环中一样,然后抛出错误消息。 FunThomas 我在宏运行时收到消息,即:单元格已更改(键入了一个值)。宏完成,然后继续,好像它卡在一个不存在的循环中,然后崩溃并显示错误消息,用户 UX 问题
-
@Andreas 请看上面的评论。谢谢
标签: excel vba module runtime-error office365