gpt4 book ai didi

Excel vba : Is it possible to access the value of a cell before the UDF called from that cell executes?

转载 作者:行者123 更新时间:2023-12-02 17:01:15 25 4
gpt4 key购买 nike

我有一个 UDF,它间接从其他工作表读取数据,在多个工作表中添加相同的单元格,即:

Function myFunction( StrArgs As String ) As Long

....

End Function

我从单元格 A1 调用此函数,该单元格现在的值为 100:

=myFunction( ... )

计算设置为手动,并在需要时刷新工作表。

由于参数 StrArgs 定义了要查询的工作表,因此我在 myFunction 中包含了一些错误检查,以防指定的工作表不存在或 StrArgs 规范中存在错误。

这工作正常,但是我正在努力解决以下问题:当在 myFunction 中发现错误时,我想返回(保留)调用单元格的现有值,而不是零或错误值。

我想要在 myFunction 开始时执行的操作是:

existingCellValue = Application.Caller.Text   'or Application.Caller.Value

然后进行计算,遇到错误时:

myFunction = existingCellValue

但是,我发现这返回零。在调试器中,我看到,一旦 myFunction 开始执行,单元格值就已设置为零。

我的问题是 - 在执行 UDF 之前有没有办法访问调用单元的现有值?

-- 编辑 - 更完整的代码,例如,它似乎工作正常:--

Function GETNUMBER(Col As String, Row As Integer) As Double
Dim LookStr As String
Dim TheAnswer As Double
Dim CellVal As Variant

On Error GoTo errHandler

CellVal = Application.Caller.Text

LookStr = "=" & Col & Row
TheAnswer = Application.Evaluate(LookStr)

GETNUMBER = TheAnswer

On Error GoTo 0

Exit Function

errHandler:
GETNUMBER = CellVal

End Function

通过模块中的上述代码,我在工作簿中输入以下内容:

Row
1: | D | 1 | =GETNUMBER(A1,B1) | 10
2: | D | 2 | =GETNUMBER(A2,B2) | 20
3: | D | 3 | =GETNUMBER(A3,B3) | 30

这将返回 D 列中的值 10、20 和 30。

现在,我将 B 列中的一个单元格更改为零,以调用 errHandler,并返回存储在开头的 CellVal。

这似乎有效,并且 Application.Caller.Text 和 Application.ThisCell.Text 都给出了正确的结果。

感谢 Charles Watson 和 KazJaw,他们都回答了这个问题。

最佳答案

有几种可能的方法,但它们都有缺点。
最简单的方法是使用 Application.Caller.Text,但它返回格式化值而不是实际值。
有关更多讨论,请参阅我关于该主题的博客文章 http://fastexcel.wordpress.com/2012/01/08/writing-efficient-vba-udfs-part-8-getting-the-previously-calculated-value-from-the-calling-cells/

关于Excel vba : Is it possible to access the value of a cell before the UDF called from that cell executes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21456442/

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