Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在excel中创建自定义超链接函数_Excel_Vba_Hyperlink - Fatal编程技术网

在excel中创建自定义超链接函数

在excel中创建自定义超链接函数,excel,vba,hyperlink,Excel,Vba,Hyperlink,我到处找了,但找不到这个简单问题的答案。我想在excel中创建一个自定义函数,它将创建一个超链接 Excel有一个内置的超链接功能,其工作原理如下: =Hyperlink(link_location, display_text) 我想创建一个名为CustomHyperlink的函数,它接受一个参数,并使用该参数返回指向google查询的超链接。为了回答这个问题,我们假设传递的参数是一个字母数字字符串,没有空格 基本上,打电话 =CustomHyperlink("excel") 应该和打电话

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

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

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

基本上,打电话

=CustomHyperlink("excel") 
应该和打电话一样

=Hyperlink("http://www.google.com/search?q=excel", "excel")
这似乎是一项如此简单的任务,但我绝对找不到实现此功能的方法


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

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

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

这将带您访问特定的网站,并围绕该网站构建一个功能,将您导航到所需的网站。

好主意,尽管这是不可能的

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

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

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


由于creamyegg建议的原因,您不能直接这样做,但是有一种方法可以实现该功能,尽管需要考虑一些性能问题

您可以使用
工作表\u 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
性能考虑因素当然是volatile
Worksheet\u Change
事件,因为这确实会杀死大型、复杂的工作簿。

我可以提供一个局部解决方案,它将更新现有的超链接。这只有在你像这样使用它时才有意义

CustomHyperlink(A1)
WARE
A1
包含所需的serch术语

使用

  • 在单元格中输入自定义项公式,例如
    =CustomHyperlink(A1)
  • 在单元格上创建超链接(右键单击,超链接…)。这可以是任何有效或无效的超链接
  • 在引用的单元格中放入所需的搜索词,例如在
    A1
    put
    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
    

    如果将其包装到工作表UDF中,则在重新计算页面/工作簿等时,将加载一个新的浏览器窗口。我想这并不理想。它确实有额外的步骤手动创建链接,但这是一个非常巧妙的解决方案,效果非常好。谢谢
    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