【发布时间】:2021-12-30 14:13:40
【问题描述】:
Function TotalHours() 旨在接受两个范围。第一个范围通常应该是一行乘七列(一周的 7 天),第二个范围是一个接受值的单元格。
我在设置一个单元格的值时遇到问题。
我遇到问题的线路:
rCell.Value = sngOT
我明白了
“应用程序定义或对象定义的错误”。
我尝试了rCell.Cells(1,1).Value = sngOT 并得到了同样的错误。
Function TotalHours(myRange As Range, rOT As Range) As Single
Dim sngHours As Single, sngNormal As Single, sngOT As Single
Dim rCell As Range
sngHours = 0
sngNormal = 0
sngOT = 0
For Each rCell In myRange
If rCell.Value > 8 Then
sngOT = sngOT + rCell.Value - 8
sngNormal = sngNormal + 8
Else
sngNormal = sngNormal + rCell.Value
End If
Next rCell
If sngNormal > 40 Then
sngOT = sngOT + (sngNormal - 40)
sngNormal = 40
End If
sngHours = sngNormal + sngOT
Set rCell = rOT
rCell.Value = sngOT
Set rCell = Nothing
TotalHours = sngHours
End Function
【问题讨论】:
-
从工作表调用的函数不能更改另一个单元格的值,只能更改放置公式的单元格。
-
顺便说一句:
=MIN(SUM(IF(A1:G1>8,8,A1:G1),40)将得到正常小时数的总和然后您需要做的就是从总和中减去该结果:=SUM(A1:G1)-H1其中 H1 具有第一个公式。 -
嗨,斯科特,谢谢。我没有意识到函数有这个限制。
-
@Scott Craner:关于“从工作表调用的函数无法更改另一个单元格的值”:如上所述,这本身不是有效的“规则”。尽管我假设您已经知道,但请参阅下面的操作方法。
-
@Spinner 我知道解决方法。我认为它是一个黑客。我很少推荐它。相反,我建议正确地做。这样做你不知道是什么改变了该单元格中的值,很难跟踪。这就是为什么你会看到很少有长期在这里推荐它的人。它不被认为是正确的编码技术。