2015-04-20 15 views
0

我已經定義在我的工作簿的Module1的功能,看起來像這樣:如何修復#VALUE!當UDF引用了另一個工作簿

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! ...直到我打開另一個工作簿,此時神奇地出現這個值。

如何強制電子表格從其他工作簿中提取值,即使它不是打開的?

+0

我敢肯定,你不能(或不能至少)得到的數據一個密切的工作簿,所以如果需要的話,你需要測試並打開它(在代碼中),然後關閉它! – R3uK

+2

VBA中的Range對象只能從打開的工作簿中創建。 – Rory

+1

[此方法](http://stackoverflow.com/a/30179303/2165759)允許通過UDF從封閉的工作簿中獲取值。 – omegastripes

回答

1

指定關閉的Excel工作簿的完整路徑應該做的伎倆。

代替

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

嘗試

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

代閉合工作簿的路徑在上面的路徑。

+0

嗯,我注意到,如果我輸入公式沒有路徑,Excel填寫路徑爲我。仍然,路徑或沒有路徑,如果工作簿是關閉的我得不到任何值 – ekkis

+0

我看到你正在傳遞一個範圍對象到函數中。正如Rory的評論所暗示的,我不確定你可以用封閉的工作簿來做到這一點。你可能不得不重新考慮你傳遞給函數的內容。一種選擇是以編程方式打開工作簿,如果喜歡,您可以在不顯示給用戶的情況下執行此操作。 – Soulfire

相關問題