在 VBA UDF 中添加超链接

Posted

技术标签:

【中文标题】在 VBA UDF 中添加超链接【英文标题】:Add Hyperlink in VBA UDF 【发布时间】:2022-01-17 22:46:38 【问题描述】:

我已经了解了如何编辑超链接 - 但我需要在用作自定义公式时添加超链接。

我收到一个 #VALUE 错误,但我不知道为什么。有没有人知道为什么当我尝试在工作表中将其用作=testit39()

时会出现 #VALUE 错误
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】:

感谢这个精彩的教程,我找到了一种不复杂的方法..

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

这实际上是可能的,但需要复杂的解决方法。 ***.com/questions/8520732/… 如果使用超链接功能并不复杂..optionexplicitvba.blogspot.co.uk/2011/04/rollover-b8-ov1.html【参考方案3】:

遵循 VBA 子代码 sn-p 允许添加新的超链接,或编辑指定示例单元格“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)中调用这个Sub,对应于你项目的其余业务逻辑(这有点不清楚):

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

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

【讨论】:

以上是关于在 VBA UDF 中添加超链接的主要内容,如果未能解决你的问题,请参考以下文章

VBA 将多个超链接添加到一个 Powerpoint 文本框

当根据单元格值为每一行添加其他数据时,VBA 创建超链接

添加超链接时,VBA抛出错误1004

使用VBA - Excel将超链接添加到表中的单元格

需要帮助使用 VBA 在 excel 中将超链接插入到我计算机上的指定图片

VBA excel中批量创建超链接代码(连接当前文档中的sheet)