我正在尝试编写一个简单的UDF,它应该循环遍历given_row的每个单元格,然后选取那些没有任何先前范围的单元格,并将这些值相加。
以下是代码:
Public Function TotalActualDeductions(given_row As Integer) As Integer
Total_Actual_Deduction = 0
For present_column = 4 To 153
Set precedent_range = Nothing
If Cells(2, present_column) = "TDS (Replace computed figure when actually deducted)" Then
On Error Resume Next
Set precedent_range = Cells(given_row, present_column).Precedents
If precedent_range Is Nothing Then
Total_Actual_Deduction = Total_Actual_Deduction + Cells(given_row, present_column)
End If
End If
Next
TotalActualDeductions = Total_Actual_Deduction
End Function
如果我尝试通过修改顶部声明来运行它,来自:
Public Function TotalActualDeductions(given_row As Integer) As Integer
为:
Public Function TotalActualDeductions()
given_row = 4
然后它成功运行,并且符合预期。它准确地获取符合标准的那些细胞,一切都很好。
但是,当我尝试从工作表中将其作为正确的UDF运行时,它不起作用。显然,当我从工作表中调用函数时,excel会处理那些没有先例的单元格,就好像它们有先例一样。
我不知道为什么会发生这种情况,或者如果range.precedents属性应该像这样。
如何解决这个问题?
答案 0 :(得分:0)
经过大量的搜索,我遇到了这个:
显然,"对包含UDF的调用堆栈中的.Precedents的任何调用都会得到不同的处理"。
所以,我所做的是使用 Range.Formula Like" = [a-zA-Z]" ,因为它满足了我的简单目的。它绝不是range.precedents属性的理想替代品。
更详细的解释,请访问该链接。