如何阻止 Excel 在打开超链接之前检查其有效性?

如何阻止 Excel 在打开超链接之前检查其有效性?

如果您打开包含外部超链接的 Excel 电子表格,当您单击该链接时,Excel 会在浏览器中实际打开它之前检查该链接是否有效(即不会返回 404 错误)。

这是令人发狂对我来说,我无论如何也无法理解为什么开发人员能够想到这是一个好主意。

副作用是,如果 Excel 与网络的连接被阻止(例如被防火墙),超链接需要更长的时间才能打开,甚至根本无法打开。

我尝试禁用“信任中心”中与链接相关的所有选项,但没有任何帮助。

我怎样才能永远关闭 Excel 中的链接检查?

答案1

注册表设置可以改变此行为并强制 Excel 仅在默认浏览器中启动 URL。这可能会带来安全隐患,因此请务必仔细阅读以下文章并决定这是否适合您。

http://support.microsoft.com/kb/218153#FixItForMeAlways

多次尝试手动编辑注册表失败后,我运行了“修复此问题”应用程序。

现在,我的超链接在默认浏览器中启动,无需预先检查,无论是由用户单击,还是通过 VBA 以编程方式启动。

答案2

在 excel 2003 中,ForceShellExecute=1regedit 解决方案不起作用。我的解决方法是使用宏直接从 shell 调用链接。下面的宏现在根据我单击的列从当前行创建 2 种类型的链接。当然可以将其更改为检查您选择的单元格中是否有链接。如果单元格中有活动链接,则使用鼠标右键选择也可以。

Option Explicit

Private Declare Function ShellExecute _
  Lib "shell32.dll" Alias "ShellExecuteA" ( _
  ByVal hWnd As Long, _
  ByVal Operation As String, _
  ByVal Filename As String, _
  Optional ByVal Parameters As String, _
  Optional ByVal Directory As String, _
  Optional ByVal WindowStyle As Long = vbMinimizedFocus _
  ) As Long

Public Sub OpenUrl(link As String)
    Dim lSuccess As Long
    lSuccess = ShellExecute(0, "Open", link)
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim c As Range: Set c = Selection
    If c.Count <> 1 Then Exit Sub
        
    Dim y As Integer: Let y = c.Row
    If y < 11 Then Exit Sub
    
    Dim name As String: Let name = Cells(y, 3).Value
    If name = "" Then Exit Sub
    
    Dim x As Integer: Let x = c.Column
    Dim link As String: Let link = ""
    If x = 10 Then Let link = "prefix of link type 1"
    If x = 11 Then Let link = "prefix of link type 2"
    If link = "" Then Exit Sub
    
    link = link & name
    OpenUrl link
End Sub

答案3

对于更多苦苦挣扎的人:我做了一个小解决方案为此,它也有一个托管变体。

答案4

Excel 找出链接指向/返回的内容 - 另一个 excel 文件、word 文档、网页等,然后在相应的应用程序或其自身中打开。这是所需的功能。

相关内容