VBA UDF无法调用Range.Precedents属性

时间:2015-05-29 14:58:54

标签: excel vba excel-vba

我正在尝试编写一个简单的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属性应该像这样。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

经过大量的搜索,我遇到了这个:

When called from an Excel VBA UDF, Range.Precedents returns the range and not its precedents. Is there a workaround?

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

所以,我所做的是使用 Range.Formula Like" = [a-zA-Z]" ,因为它满足了我的简单目的。它绝不是range.precedents属性的理想替代品。

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