【问题标题】:Creating a custom hyperlink function in excel在excel中创建自定义超链接函数
【发布时间】:2014-08-18 13:02:19
【问题描述】:

我进行了广泛搜索,但找不到这个简单问题的答案。我想在 excel 中创建一个自定义函数,它将创建一个超链接。

Excel 有一个内置的超链接功能,其工作原理如下:

=Hyperlink(link_location, display_text)

我想创建一个名为 CustomHyperlink 的函数,它接受一个参数,并返回一个指向带有该参数的 google 查询的超链接。只是为了这个问题,我们假设传递的参数是一个字母数字字符串,没有空格。

本质上是调用

=CustomHyperlink("excel") 

应该和调用一样

=Hyperlink("http://www.google.com/search?q=excel", "excel")

这似乎是一个如此简单的任务,但我绝对找不到实现此功能的方法。

谁能提供一些快速帮助?

【问题讨论】:

    标签: excel vba hyperlink


    【解决方案1】:

    我可以提供 部分 解决方案,该解决方案将 更新 现有的超链接。这只有在你使用它时才有意义,比如说

    CustomHyperlink(A1)
    

    A1 是否包含所需的搜索词

    使用,

    1. 在单元格中输入您的 UDF 公式,例如=CustomHyperlink(A1)
    2. 在单元格上创建一个超链接(右键单击,超链接...)。这可以是任何超链接,有效或无效
    3. 将所需的搜索词放入引用的单元格中,例如A1 放入excel

    当 UDF 运行时,它会更新到 Google 输入的搜索词的超链接

    Function CustomHyperlink(Term As String) As String
        Dim rng As Range
    
        Set rng = Application.Caller
        CustomHyperlink = Term
    
        If rng.Hyperlinks.Count > 0 Then
            rng.Hyperlinks(1).Address = "http://www.google.com/search?q=" & Term
        End If
    End Function
    

    【讨论】:

    • 它确实有手动创建链接的额外步骤,但它是一个非常巧妙的解决方案并且效果很好。谢谢!
    【解决方案2】:

    在 VBA 编辑器中你可以使用

    ThisWorkbook.FollowHyperlink Address:=(strWebsite), NewWindow:=True
    

    它将带你到那个特定的网站,然后围绕它构建一个函数来导航到你需要的网站。

    【讨论】:

    • 如果这被包装到工作表 UDF 中,那么在重新计算页面/工作簿等时,将加载一个新的浏览器窗口。我想这不太理想。
    【解决方案3】:

    好主意,虽然这是不可能的。

    您似乎希望将单元格的公式作为一件事(您的自定义函数调用)而将值作为另一件事(超链接/ URL),这根本是不可能的。

    通过 VBA 添加超链接的正确方法是使用 Hyperlinks 属性,但无法通过 Worksheet UDF 调用此属性(由于上述原因)。

    仅使用内置的 =Hyperlink() 工作表函数有什么问题?您可以按如下方式有效地参数化您的 URL(其中单元格 A1 = Excel):

    =HYPERLINK("http://www.google.com/search?q="&A1)
    

    【讨论】:

      【解决方案4】:

      由于 creamyegg 建议的原因,您不能直接执行此操作,但有一种方法可以实现该功能,尽管需要考虑一些性能。

      您可以使用 Worksheet_Change 事件来跟踪您的 UDF 的存在,然后在那里处理超链接添加。

      您需要设置一个空函数来允许这种情况发生,否则每当您在单元格中输入=CustomHyperlink... 时,Excel 都会抛出错误。

      下面应该可以工作,没有时间测试。

      Private Sub worksheet_change(ByVal target As Range)
          Dim SearchValue As String
          If LCase(Left(target.Formula, 16)) = "=customhyperlink" Then
              SearchValue = Mid(target.Formula, 19, Len(target.Formula) - 20)
              target.Value = SearchValue
              target.Hyperlinks.Add target, "http://www.google.com/search?q=" & SearchValue, ,     "Search Google for " & SearchValue, SearchValue
          End If
      End Sub
      

      性能方面的考虑当然是易变的Worksheet_Change 事件,因为这确实会杀死大型、复杂的工作簿。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多