2014-11-24 44 views
1

我想用我自己的用戶定義函數填充單元格的內容。特別是,我試圖使單元格的內容成爲同一工作表中超鏈接單元格的URL地址。從單元格獲取超鏈接地址的用戶自定義函數

我不斷收到#VALUE!錯誤。我的功能看起來是這樣的:

Function GetAddress(myCell As Range) As String 
    Dim temp As String 
    temp = myCell.Hyperlinks(1).Address 
    GetAddress = temp 
End Function 

我曾嘗試不使用臨時而是直接指定輸出的getAddress,這仍然無法正常工作的幾種形式。如果我返回myCell.Address,它會正確給出單元格地址,但是一旦我嘗試獲取超鏈接地址,就會出現問題。我見過的每個例子都會失敗。

有誰知道這可以做到嗎?

+1

我測試你的代碼,無法重現您的問題。代碼按預期工作。 [證明](http://i.imgur.com/OdoJwZR.png) – 2014-11-24 08:37:46

+0

我同意@ Jean-FrançoisCorbett。經過測試,它工作。你確定你正在傳遞正確的單元格功能嗎?你是如何通過它?如果單元格中沒有超鏈接,則返回「#VALUE」,那麼您是否可以首先手動驗證是否存在超鏈接? – 2014-11-24 08:40:38

+0

@ vba4all:我認爲'Application.Volatile'會幫助... – 2014-11-24 08:51:44

回答

1

你的代碼工作正常,但你只需強制UDF重新計算,否則其結果不會得到更新。如果你想讓它自動重新計算,你可以使用Application.Volatile(你可以刪除不必要的臨時):

Function GetAddress(myCell As Range) As String 
    Application.Volatile 
    GetAddress = myCell.Hyperlinks(1).Address 
End Function 

現在你就不必手動迫使它重新計算。雖然要小心,多次調用volatile函數可以減慢速度。做手工的

例子:

enter image description here

現在寫東西A1:

enter image description here

現在添加一個鏈接:

enter image description here

函數沒有得到重新計算...迫使它重新計算例如通過單擊單元格,按F2鍵,然後輸入:

enter image description here

相關問題