获取Excel Vba错误,但代码仍在工作?
我已经很久没有使用VBA,甚至excel了,但出于工作和繁琐的excel编辑的原因,我决定把它变成自动的。我有一个电子表格,其中有一个表格,用于计算经过审查的员工姓名的员工工资,并且由于明显的原因,大部分表格都被删掉了: 该表基于一个计分制,未来的老板将根据员工当天的表现在每一列中记下1到3的分数,但缺勤列除外。然后,电子表格将右侧“总计”列中的总分相加。然后根据这些分数对员工进行从A+到C的评分。这是我的职责。我决定要做的是编写一个简单的vba代码,以自动完成这项工作,使员工数量远远超过您在图片上看到的数量,所以不要叫我懒惰!。以下是从以下内容开始的:获取Excel Vba错误,但代码仍在工作?,vba,excel,automation,Vba,Excel,Automation,我已经很久没有使用VBA,甚至excel了,但出于工作和繁琐的excel编辑的原因,我决定把它变成自动的。我有一个电子表格,其中有一个表格,用于计算经过审查的员工姓名的员工工资,并且由于明显的原因,大部分表格都被删掉了: 该表基于一个计分制,未来的老板将根据员工当天的表现在每一列中记下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
这对我来说似乎很简单,但我有一个问题,每次它运行时,我都会出现以下错误:
对象\u工作表的“方法范围”失败
但事实并非如此。如果我在出现错误提示时单击“结束”,它会工作!完全按照我想要的方式工作
有人能帮我解决这个错误吗,指出我代码中的错误
还有,请有人向我解释为什么每次代码执行时都会出现错误,但代码仍然有效。这是怎么可能的???我无法在注释中发布代码,但下面的代码工作正常,并执行您打算执行的操作 这个小故障似乎是由正在检查的目标单元和正在更换的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 Craner建议的公式设置。那么当公式设置失败时,它会突出显示哪一行?您正在使用基于工作表的事件来执行此操作,同时只引用代码P7中的一个单元格来更新Q7。您是否为每位员工使用一张表格?为什么不使用公式?这是相当简单的INDEXMATCH。至于代码,请尝试将ActiveSheet更改为我。@ShrivallabhaRedji它突出显示了第一条if语句。不管我只对一个细胞做这个,我以后会改变的。首先,我需要确认代码是否正确works@ScotCraner是的,我想使用代码,但把它改成我却没用。老实说,我和你们一样困惑。我不明白这到底是怎么回事,但确实如此!然而,我不喜欢在不知道自己在做什么的情况下从别人那里抄袭东西。不过,我现在确实意识到了问题所在,所以非常感谢您的支持。非常好,所以它起作用了!你在这里不明白的是什么?哦,不明白;只是我已经有一段时间没有编写VBA了,所以我需要一些时间来适应它。无论如何谢谢你