如果您打开包含外部超链接的 Excel 电子表格,当您单击该链接时,Excel 会在浏览器中实际打开它之前检查该链接是否有效(即不会返回 404 错误)。
这是令人发狂对我来说,我无论如何也无法理解为什么开发人员能够想到这是一个好主意。
副作用是,如果 Excel 与网络的连接被阻止(例如被防火墙),超链接需要更长的时间才能打开,甚至根本无法打开。
我尝试禁用“信任中心”中与链接相关的所有选项,但没有任何帮助。
我怎样才能永远关闭 Excel 中的链接检查?
答案1
注册表设置可以改变此行为并强制 Excel 仅在默认浏览器中启动 URL。这可能会带来安全隐患,因此请务必仔细阅读以下文章并决定这是否适合您。
http://support.microsoft.com/kb/218153#FixItForMeAlways
多次尝试手动编辑注册表失败后,我运行了“修复此问题”应用程序。
现在,我的超链接在默认浏览器中启动,无需预先检查,无论是由用户单击,还是通过 VBA 以编程方式启动。
答案2
在 excel 2003 中,ForceShellExecute=1
regedit 解决方案不起作用。我的解决方法是使用宏直接从 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 文档、网页等,然后在相应的应用程序或其自身中打开。这是所需的功能。