【问题标题】:Add Hyperlink in VBA UDF在 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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 2015-07-23
        • 2018-09-22
        • 1970-01-01
        相关资源
        最近更新 更多