VBA UDF无法调用Range.Precedents属性

我试图写一个简单的UDF,它应该循环遍历给定的行的每个单元格,并拿起那些没有任何先例范围的单元格,并将这些值相加。

这里是代码:

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属性应该是这样的。

这怎么解决?

经过大量的search,我遇到了这样的情况:

从Excel VBA UDF中调用时,Range.Precedents返回范围而不是其先例。 有没有解决方法?

显然,“任何调用包含UDF的调用堆栈中的.Precedents都会得到不同的处理”。

所以,我所做的就是使用Range.Formula就像“= [a-zA-Z]” ,因为它满足了我的简单目的。 它不是range.precedents属性的理想select。

敌人更详细的解释,请访问该链接。