[英]When called from an Excel VBA UDF, Range.Precedents returns the range and not its precedents. Is there a workaround?
[英]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.