繁体   English   中英

VBA UDF无法调用Range.Precedents属性

[英]VBA UDF fails to call Range.Precedents property

我正在尝试编写一个简单的UDF,该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属性是否应具有这种行为。

如何解决?

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

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

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

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

有关详细说明,请访问该链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM