【发布时间】:2017-12-27 15:20:25
【问题描述】:
我正在编写以下代码,它将根据单击链接时链接是否有效来重新格式化包含链接的单元格:
Private Sub worksheet_followhyperlink(ByVal HL As HYPERLINK)
Dim linkReq As Object
Dim linkStatus As Integer
Application.ScreenUpdating = False
On Error GoTo linkError
Set linkReq = New MSXML2.XMLHTTP60
With linkReq
.Open "GET", HL.address, False
.Send
End With
linkStatus = linkReq.Status
If linkStatus = 404 Then HL.Parent.Interior.Color = rgbPink
If linkStatus <> 404 Then HL.Parent.Interior.Pattern = xlNone
If HL.Parent.Interior.Pattern = xlNone Then GoTo exitSub
Application.ScreenUpdating = True
MsgBox("Link is broken")
exitSub:
Application.ScreenUpdating = True
Exit Sub
linkError:
linkStatus = 404
Resume Next
End Sub
代码昨天运行良好!但是现在,它会将所有内容都返回为“404”并将单元格标记为粉红色,即使链接有效。调试显示 HL.address 的值是“folder/Document.pdf”而不是“https://website/folder/Document.pdf”。此 Excel 文档通过共享点托管在“https://website”上。
由于截断,代码无法正常工作。
有没有办法从 excel 超链接中提取完整的 url,而不用截断,而不管 url 的大小?
【问题讨论】:
-
重新添加超链接可以解决问题。我目前的解决方法是创建一个重新加载所有超链接的 workbook_open 宏...
-
此解决方法已停止工作。在某些情况下,超链接增长得足够长,以至于即使是新填充的超链接也会返回格式为“../../folder/Document.pdf”的地址
-
我当前的解决方法是使用 UDF 将完整的超链接存储为单元格中的字符串,并使用它在工作簿打开时重新应用超链接以及在错误检查期间作为参考。这带来了单独的优化问题,这些问题已得到解决。不能使用=HYPERLINK函数,因为点击这样的超链接不会触发followHyperlink事件。
-
CurDir() 的值有什么用?
-
Debug.Print CurDir() = C:\Users\matt2103\Desktop
标签: excel sharepoint hyperlink vba