【问题标题】:Extract hyperlink target from a cell in different workbook从不同工作簿中的单元格中提取超链接目标
【发布时间】:2016-08-03 01:23:32
【问题描述】:

我有一个具有自定义右键单击功能的工作簿,该功能可以根据用户选择的内容从另一个工作簿中提取单元格值。它工作得很好,我只是从另一个工作簿中获取单元格的值。不过,有些单元格包含超链接,我想导入功能超链接,而不是单元格中显示的值。例如,下图包含输入工作簿工作表 BOS 的单元格 (Y216) 中的超链接。

这是我要复制的单元格的图像。确实是超链接。

?application.Workbooks(2).Sheets("BOS").Range("Y216").value

返回 MKB 70-203 Wicket Shear Pin Detection System,这确实是正确的。

但是如何获取超链接的目的地?我尝试了几件事,包括

?application.Workbooks(2).Sheets("BOS").Range("Y216").Hyperlinks.count

即使您可以在图像中看到超链接确实有地址,也会返回 0。以同样的方式,下面的 sub 不会进入 For Each,因为它计算了 0 个超链接。

Sub HLtester()
    Dim HL As Hyperlink
    For Each HL In Application.Workbooks(2).Sheets("BOS").Range("Y216").Hyperlinks
        Debug.Print HL.Address
    Next
End Sub

预期的输出将是链接的目标J:\SOUM\3191....,如图所示。

编辑

如果单元格的公式很重要

=LIEN_HYPERTEXTE("J:\SOUM\3191 M - Old Hickory Dam\11_BOS_FT\02_FT_MECT\21-200 Headcover";"21-200 Headcover")

顺便说一下,这是法语 Excel 的=HYPERLINK 函数。我想在万不得已的情况下,我可以采用公式并切断function 部分以检索链接部分?

【问题讨论】:

  • 您是否检查过 Workbooks(2).Sheets("BOS").Hyperlinks 以查看工作表上是否存在超链接(如果不在该特定范围内)?如果它们存在,您能否查看它们并确认其中一个位于 Y216?
  • @Mikegrann 它根本不返回整个工作表的超链接。也许我的超链接有问题?我尝试了它们,它们起作用了。它们是使用 =Hyperlink 公式(不是 VBA)创建的。它们都指向外部参考。 debug.print .Formula 给出 =HYPERLINK("J:\SOUM\3191 M - Old Hickory Dam\11_BOS_FT\02_FT_MECT\HM3191 00 MEF 32-202 F DA-01.pdf","HM3191 00 MEF 32-202 F DA-01.pdf") 所以我想我可以在最坏的情况下围绕我的目标修剪公式......
  • 嗯,我想这可以解释。我会四处寻找它,但我很确定我以前遇到过这种情况:通过工作表函数创建的超链接的处理方式与插入的超链接不同,只有后者出现在 Hyperlinks 集合中。看起来您将不得不手动从 Range.Formula 中提取参数

标签: vba excel


【解决方案1】:

你的命令对我有用,如果你想循环访问工作表中的所有超链接,我不知道你为什么要设置范围 - 也不是为什么你设置为应用程序。工作簿-无论如何,这对我来说很好:

Sub HLtester()
    Dim HL As Hyperlink
    For Each HL In Sheets("Sheet1").UsedRange.Hyperlinks
        Debug.Print HL.Address
    Next
End Sub

您也可以使用以下方法在范围内获得它

ActiveCell.Hyperlinks(1).Address

您可能会得到更多信息here

编辑:
可能由于“application.workbook”导致计数错误,请尝试将其声明为变量,而不是在整个代码中使用它

Sub HLtester()
    Dim HL As Hyperlink
    Dim WBAnalyzed As Workbook: Set WBAnalyzed = Workbooks("MyWB.xlsm")
    For Each HL In WBAnalyzed.Sheets("Sheet1").UsedRange.Hyperlinks
        Debug.Print HL.Address
    Next
End Sub

编辑 2:
这是由公式给出的超链接时建议的方法

Sub test()
    On Error Resume Next 'means no formula
    x = Evaluate(Range("A1").Formula)
    x1 = Sheets("Sheet1").UsedRange.Hyperlinks.Count
    Debug.Print x
    Debug.Print x1
End Sub

PS:我保存了我的变量声明-只是因为-,但是,您应该始终对它们有一个整洁的控制,并在模块的开头使用显式选项。

【讨论】:

  • 在我的示例中,我正在逐个单元格地执行此操作,因为这实际上是我想要做的。我不想遍历工作表中的每个超链接。我只想从特定单元格中提取超链接。 ActiveCell.Hyperlinks(1).Address 给出了超出范围的异常,原因是我在问题中描述的;超链接的计数为 0。我设置 application.workbooks 因为代码是从某个工作簿调用的,并且超链接位于第二个工作簿中。您还希望我如何访问第二个工作簿的单元格?
  • 为什么不声明一个 Workbook 变量然后访问它而不是 application.workbook?检查我的更新回复。
  • 哦,一旦我让它工作,这绝对是我要做的,但现在我不明白为什么 application.workbooks 会成为问题的原因。我还没有在我的代码模块中插入它,所以我在测试子中使用它。我会尽量避免使用它并回复你 -
  • OT:随着您的开发,您会发现您需要在其本机函数中重新定义一些并不总是准确的 excel 错误,我现在可以考虑的一个是删除重复项,在某些情况下在场景中,它并不能准确地做到这一点,在 VBA 中也会发生同样的情况——即使该行是正确的——编译器有时也会出现随机错误。
  • 仍然没有结果。即使是.UsedRange 版本也为整个工作表提供了 0 个超链接。我真的不明白为什么,单元格中写有=HYPERLINK("J:\SOUM\3191 M - Old Hickory Dam\11_BOS_FT\02_FT_MECT\HM3191 00 MEF 32-202 F DA-01.pdf","HM3191 00 MEF 32-202 F DA-01.pdf") 或类似的东西。你觉得这很正常吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
相关资源
最近更新 更多