2014-12-20 36 views
1

我已经看到了如何编辑超链接 - 但我需要一个自定义公式中使用时添加一个超链接。在VBA UDF添加超链接

我得到一个#VALUE错误,我不知道为什么。有没有人有,为什么我得到一个#VALUE错误的任何想法,当我尝试使用它在一张纸上=testit39()

Public Function testit39() As String 
Application.Volatile 
Dim rng As range, milestoneinfo As String, milestonesymbol As String 

Set rng = Application.Caller 
milestoneinfo = "info" 
milestonesymbol = "symbol" 
If rng.Hyperlinks.Count > 0 Then 
    rng.Hyperlinks(1).address = "" 
    rng.Hyperlinks(1).screentip = milestoneinfo 
    Else 
    ThisWorkbook.ActiveSheet.Hyperlinks.Add Anchor:=rng, _ 
           address:="", _ 
           screentip:=milestoneinfo 

    rng.Hyperlinks(1).screentip = milestoneinfo 
    End If 

testit39 = milestonesymbol 
End Function 

回答

1

的UDF(用户定义函数)只允许返回一个值,他们可能不会例如affect other cells或做其他操作。
当你通过单步执行代码,你会看到它中止对...Hyperlinks.Add系法(和返回错误值)。

+0

它实际上可能但需要复杂的解决方法。 http://stackoverflow.com/questions/8520732/i-dont-want-my-excel-add-in-to-return-an-array-instead-i-need-a-udf-to-change – brettdj

+0

并不复杂如果您使用的超级链接功能.. http://optionexplicitvba.blogspot.co.uk/2011/04/rollover-b8-ov1.html – Wickey312

0

以下VBA子代码片段允许添加新的超链接,或编辑现有的指定样本细胞“A1”(你的代码的非重要部分已经更多,更清晰删除):

Public Sub AddOrEditHyperlink(milestonesymbol As String) 
    Dim rng As Range, milestoneinfo As String 
    'test range 
    Set rng = Range("A1") 
    'sample properties 
    milestoneinfo = "info" 
    'if Hyperlink exists, display "Edited" 
    If rng.Hyperlinks.Count > 0 Then 
     rng.Hyperlinks(1).Address = "" 
     rng.Hyperlinks(1).ScreenTip = milestoneinfo 
     rng.Hyperlinks(1).TextToDisplay = "Edited Hyperlink" 
    Else 'if Hyperlink does not exist, add and display "New" 
     rng.Hyperlinks.Add _ 
     Anchor:=rng, _ 
     Address:="", _ 
     ScreenTip:=milestoneinfo, _ 
     TextToDisplay:="New Hyperlink" 
    End If 
End Sub 

你可以从您可以定义对应项目的业务逻辑(这是一个有点不清楚关节)其余的函数(UDF)调用此子:

Public Function testit39() As String 
    Application.Volatile 
    Dim rng As Range, milestoneinfo As String, milestonesymbol As String 
    Call AddOrEditHyperlink("some Symbol") 
    testit39 = milestonesymbol 
End Function 

希望这会有所帮助。最好的问候