我使用了 Concatenate 函数来连接链接,如下所示:
Column 1: http://twitter.com/
Column 2: username
Column 3: http://twitter.com/username
我实际上写了这样的函数:
=hyperlink(CONCATENATE(cell1,cell2))
现在它将所有单元格显示为链接。接下来,我转到 Visual Basic 并添加以下模块(它允许我一次打开多个链接):
Sub Hyperlink_Follow()
For Each c In Selection
On Error Resume Next
c.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
Next
End Sub
接下来,我选择了链接并运行宏,但什么也没有发生。
如果您按照上述步骤并运行如下链接:
http://google.com
http://twitter.com
http://reddit.com
运行正常。问题出在串联链接上。
知道原因吗?有什么解决方法吗?
答案1
据我所知,它失败是因为使用HYPERLINKS
Excel 函数创建的超链接未包含在HYPERLINKS
单元格的 VBA 集合中。尝试使用Debug.Print c.Hyperlinks(1).Address
并注意它不会按公式打印创建超链接的单元格的 URL。通过尝试在 Excel 中编辑超链接,这得到了进一步的支持。右键单击具有该HYPERLINK
功能的单元格只会为您提供“删除超链接”选项,单击它不会执行任何操作。常规超链接允许您编辑、打开或删除它。
这是一种解决方法,首先尝试提取值,如果失败,则提取单元格的文本值。请注意,如果您在公式中HYPERLINK(1).ADDRESS
使用参数,则此方法将不起作用,因为它将被读取为单元格值。friendly_name
HYPERLINK
Sub Hyperlink_Follow()
Dim c As Range
Dim url As String
For Each c In Selection.Cells
url = ""
On Error Resume Next
url = c.Hyperlinks(1).Address
If url = "" Then url = c.Value
ThisWorkbook.FollowHyperlink url
Application.Wait Now() + TimeValue("00:00:03")
Next
End Sub
请注意,我还在每个 URL 之间添加了 3 秒的暂停,因为我发现一次打开太多 URL 往往会覆盖上次创建的窗口,而不是创建一个新窗口。这可能只是因为我正在使用 IE 工作。您可以测试一下,如果不需要,可以将其删除。