获得Excel VBA的错误,但代码仍然工作?

自从我使用VBA以来,已经有很长一段时间了,甚至是出类拔萃,但是由于我的工作原因以及繁琐的excel编辑,我决定自动填充。 我有一张电子表格,里面有一张计算员工工资的表格(审查员工姓名和大部分表格出于显而易见的原因):

编辑为隐私REASOSN

该表基于积分系统,未来的老板将根据员工当天的工作情况,在每一列中填入1至3的点数(缺席栏除外)。 然后,电子表格将“总计”列中的总分数汇总到右侧。 然后根据这些要点将员工从A +分级到C级。 这是我的一部分。 我想做的是写一个简单的vba代码来自动做到这一点(有更多的员工比你在这张照片上看到的,所以不要叫我懒惰!)。 所以这里是开始的:

Private Sub Worksheet_Change(ByVal Target As Range) If ActiveSheet.Range("P7").Value >= 10 Then 'Total points value ActiveSheet.Range("Q7").Value = "A+" 'change value of the grade ElseIf ActiveSheet.Range("P7").Value >= 8 Then ActiveSheet.Range("Q7").Value = "A" ElseIf ActiveSheet.Range("P7").Value >= 6 Then ActiveSheet.Range("Q7").Value = "B+" ElseIf ActiveSheet.Range("P7").Value >= 4 Then ActiveSheet.Range("Q7").Value = "B-" Else ActiveSheet.Range("Q7").Value = "C" End If End Sub 

这似乎很简单,但我有一个问题,每次运行我得到这个错误:

方法对象“_Worksheet”的“范围”失败

而这还不是。 如果我点击“结束”错误提示出现时,它的工作原理! 以我想要的方式完美地工作!

所以有人可以帮助这个错误,指出我的代码什么是错的甚至更多可以有人请向我解释为什么我得到这个错误每次代码执行,但代码仍然工作。 这怎么可能??

我无法发表评论中的代码,但下面的代码工作没有错误,并做你打算做的。

这个故障似乎是由于被检查的单元(目标)和被改变的单元(Q7)在同时触发时发生冲突的问题。

 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo eosub Application.EnableEvents = False If ActiveSheet.Range("P7").Value >= 10 Then 'Total points value ActiveSheet.Range("Q7").Value = "A+" 'change value of the grade ElseIf ActiveSheet.Range("P7").Value >= 8 Then ActiveSheet.Range("Q7").Value = "A" ElseIf ActiveSheet.Range("P7").Value >= 6 Then ActiveSheet.Range("Q7").Value = "B+" ElseIf ActiveSheet.Range("P7").Value >= 4 Then ActiveSheet.Range("Q7").Value = "B-" Else ActiveSheet.Range("Q7").Value = "C" End If eosub: Application.EnableEvents = True End Sub 

但是,如果您手动填充列P,那么这应该是:

 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo eosub Application.EnableEvents = False If Target.Column = 16 Then If Target.Value >= 10 Then 'Total points value Target.Offset(0, 1).Value = "A+" 'change value of the grade ElseIf Target.Value >= 8 Then Target.Offset(0, 1).Value = "A" ElseIf Target.Value >= 6 Then Target.Offset(0, 1).Value = "B+" ElseIf Target.Value >= 4 Then Target.Offset(0, 1).Value = "B-" Else Target.Offset(0, 1).Value = "C" End If End If eosub: Application.EnableEvents = True End Sub 

不过,最简单的方法是使用Scott Cranerbuild议的公式设置。