在Excel中创建自定义超链接功能

时间:2012-03-05 01:50:04

标签: excel vba hyperlink

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

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

=Hyperlink(link_location, display_text)

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

基本上,呼叫

=CustomHyperlink("excel") 

应与调用

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

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

有人可以提供一些快速帮助吗?

4 个答案:

答案 0 :(得分:1)

我可以提供部分解决方案,更新现有的超链接。如果您正在使用它,那么这只会发生,例如

CustomHyperlink(A1)

A1包含所需的serch术语

使用,

  1. 在单元格中输入您的UDF公式,例如=CustomHyperlink(A1)
  2. 在单元格上创建超链接(右键单击,超链接...)。这可以是任何超链接,有效或无效
  3. 将所需搜索字词放入引用的单元格中,例如A1 put excel
  4. 当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
    

答案 1 :(得分:0)

在VBA编辑器中,您可以使用

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

将带您进入该特定网站,并围绕该网站构建一个功能,以引导您访问所需的网站。

答案 2 :(得分:0)

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

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

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

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

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

答案 3 :(得分:0)

由于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事件,因为这可以真正杀死大型复杂的工作簿。