在单个单元格中,我有一个分配的引用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大致执行以下操作:...函数...