在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 

我发现了一个非常复杂的方法,这要归功于这个精彩的教程。

http://optionexplicitvba.blogspot.co.uk/2011/04/rollover-b8-ov1.html

所以基本上你把它放在一个超链接,你可以随心所欲地做。

 =hyperlink(testit39(), "Wahoo it works!") 

UDF(用户定义的函数)只允许返回一个值,它们可能不会影响其他单元格或执行其他操作。
当你单步执行你的代码时,你会发现它会中止...Hyperlinks.Add -line(并返回一个错误值)。

遵循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 

希望这会有所帮助。 最好的祝福