gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:27:44 25 4
gpt4 key购买 nike

我有这个VBA函数:

Public Function testPrec(target As Range) As String
testPrec = target.Precedents.Address(External:=False)
End Function

在单元格 C11 中,我有以下公式:

=C6+C8

如果我从立即窗口调用 testPrec,它就可以正常工作:

?testPrec([c11])
$C$6,$C$8

编辑:如果从非 UDF 宏 Sub 调用,它也可以正常工作。异常情况是 UDF 情况。

如果我从工作表中将其作为 UDF 调用:

=testPrec(C11)

我刚刚得到“$C$11”。

有谁知道发生了什么,或者更好地知道如何从 UDF 调用中获取实际的先例? (我使用的是 Excel 2007。)

最佳答案

看来约束在于包含 UDF 的调用堆栈中对 .Precedents 的任何调用都会以不同的方式处理。因此,找到一种方法来执行从 UDF 触发的调用堆栈之外的调用:一个想法是使用事件。这是一个过于简单的示例来演示

在模块中定义

Public strPrecedent As String
Public rngPrecedent As Range

Public Function testPrec(target As Range) As String
Set rngPrecedent = target
testPrec = strPrecedent
End Function

在工作表中定义

Private Sub Worksheet_Calculate()
If Not Module1.rngPrecedent Is Nothing Then
Module1.strPrecedent = Module1.rngPrecedent.Precedents.Address(External:=False)
End If
End Sub

testPrec 现在返回正确的范围地址,尽管一次调用晚了。这个想法是让 UDF 构建一个地址列表来获取 Precedents,并创建一个事件来执行实际的 GetPrecedent 工作,将地址字符串返回到列表以供 udf 拾取。您也许可以根据您的需要构建一个可行的解决方案。

关于excel - 从 Excel VBA UDF 调用时,Range.Precedents 返回范围而不是其先例。有解决方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5541342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com