如果UDF公式失败,excel vba将保留原始值

问题描述 投票:1回答:3

在单个单元格中,我有一个分配的引用UDF的公式:

=getValueFromWorkbook("OtherWorkbook", 10)

getValueFromWorkbook UDF大致执行以下操作……

Function getValueFromWorkbook(workbookName As String, identifier As Integer) As Variant
  ' some magic is done to get the `worksheetName` and `cellRange`
  ' but for simplicity, we'll just stub them here...
  Dim worksheetName As String: worksheetName = "SomeWorkSheet"
  Dim cellRange As String: cellRange = "A1"
  getValueFromWorkbook = Workbooks("" & workbookName & ".xlsx").Worksheets(worksheetName).Range(cellRange).Value
End Function

这很好用,只要OtherWorkbook.xlsx是一个打开的工作簿,单元格就会获得正确的值,并且世界是幸福的。

现在,如果我关闭OtherWorkbook.xlsx工作簿,事情将继续进行,并且单元格值仍将得到反映。

但是,如果我删除一行或执行其他操作导致Excel重新计算所有单元格值,则UDF失败(因为所引用的工作簿不再打开),导致可怕的#VALUE!

理想情况下,我希望这样做是为了保留原始(陈旧)值,而不是返回错误,但我还没有找到执行此操作的方法。

我尝试过的...

Function getValueFromWorkbook(...) As Variant
  ...
  On Error Resume Next
    getValueFromWorkbook = ...
  If Err.Number <> 0 Then
    Err.Clear
    getValueFromWorkbook = Application.Caller.Value
  End If
End Function

但是这会导致循环引用错误:

公式中的单元格引用引用公式的结果,创建循环引用。

但是,如果我将Application.Caller.Value更改为Application.Caller.Text,则此方法有些奏效,但是它以文本形式返回,并且我失去了原始的值格式。

因此,长话短说,有一种方法可以保留原始的链接值,而不是返回垃圾#VALUE!

P.S。我是VBA的新手,所以这里可能缺少一些明显的东西。

[在单个单元格中,我有一个分配的引用UDF的公式:= getValueFromWorkbook(“ OtherWorkbook”,10)getValueFromWorkbook UDF大致执行以下操作:...函数...

excel vba excel-vba excel-formula
3个回答
0
投票
type

0
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.