Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取Excel Vba错误,但代码仍在工作?_Vba_Excel_Automation - Fatal编程技术网

获取Excel Vba错误,但代码仍在工作?

获取Excel Vba错误,但代码仍在工作?,vba,excel,automation,Vba,Excel,Automation,我已经很久没有使用VBA,甚至excel了,但出于工作和繁琐的excel编辑的原因,我决定把它变成自动的。我有一个电子表格,其中有一个表格,用于计算经过审查的员工姓名的员工工资,并且由于明显的原因,大部分表格都被删掉了: 该表基于一个计分制,未来的老板将根据员工当天的表现在每一列中记下1到3的分数,但缺勤列除外。然后,电子表格将右侧“总计”列中的总分相加。然后根据这些分数对员工进行从A+到C的评分。这是我的职责。我决定要做的是编写一个简单的vba代码,以自动完成这项工作,使员工数量远远超过您在图

我已经很久没有使用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了,所以我需要一些时间来适应它。无论如何谢谢你