如何修复#VALUE! 当UDF引用另一个工作簿时

我在工作簿的Module1中定义了一个如下所示的函数:

 Function Header(r As Range) As String For i = 1 To r.Row If r.Offset(-i, -1).Value = "" Then Header = r.Offset(-i).Value Exit For End If Next End Function 

我用另一个工作簿的单元格的引用来调用它:

 =Header('[OtherWorkbook.xlsx]Sheet1'!C34) 

而我得到的是#VALUE! …直到我打开另一本工作簿,在这一点上神奇的价值出现。

如何强制电子表格从其他工作簿中获取值,即使它不是打开的?

指定closures的Excel工作簿的完整path应该做的伎俩。

代替

 =Header('[OtherWorkbook.xlsx]Sheet1'!C34) 

尝试

 =Header('C:\Users\your_username\Desktop\[OtherWorkbook.xlsx]Sheet1'!C34) 

将上面的pathreplace为已closures的工作簿的path。

所以答案是:这是做不到的。 要获取值,打开工作簿是必需的。

上面提供了@omegastripes的替代方法,虽然看起来相当复杂:

如何从Excel工作簿中选取值并在活动工作簿上按function返回