从外部数据库获取超链接

时间:2015-03-25 16:55:55

标签: excel vba

我在从外部源获取超链接的值或URL时遇到问题。

我有一个包含以下公式的单元格:

=HYPERLINK([@[CHANGE_LINK]])

它从外部数据源获取URL并将其放入单元格中。

在我的VBA sub中,我有以下内容:

Dim cellRow As Integer
Dim URL As String
Dim rng As Range
Set rng = Sheets(changeSheet).Range("A1:A2000").SpecialCells(xlCellTypeVisible)
cellRow = 4
For Each Value1 In rng.SpecialCells(xlCellTypeVisible)
    URL = Range(Value1.Address).Value '<----CANT GET URL!
    MsgBox URL
    Sheets(sheetname).Range("B" & cellRow & ":B" & cellRow).Value = "=HYPERLINK(" & URL & ",""View Change"")"
    cellRow = cellRow + 1
Next Value1

然而,我的问题是。如何将该公式的URL添加到VBA变量中?

我尝试了多种方法,但似乎没有人获取网址:

Range("A1:A1").value
Range("A1:A1").Address
Range("A1:A1").Formula
Range("A1:A1").Hyperlink(1)
Range("A1:A1").Hyperlink(1).Item(1)
Range("A1:A1").Hyperlinks
Range("A1:A1").Hyperlink.address
Range("A1:A1").Hyperlink.subaddress

更新27/03/2015

我使用以下代码,这应该有效。但是,它不会将文本作为字符串进行检索。它似乎不允许我在脚本中使用它...不知道为什么..

Dim row As Range
Dim cellRow As Integer
Dim URL As String
Dim rng As Range

Set rng = Sheets(changeSheet).Range("B19:B2000")
cellRow = 4
For Each row In rng.SpecialCells(xlCellTypeVisible)
    URL = row.Text <--Application doesnt like the URL parsed into the statement below:
    Sheets(sheetname).Range("B" & cellRow & ":B" & cellRow).Value = "=HYPERLINK(" & URL & ",""View Change"")" <---This is now the issue, ERROR 1004, Application or Object defined error....
    cellRow = cellRow + 1
Next row

2 个答案:

答案 0 :(得分:1)

所以我认为你的根本问题是在你的函数设置行中,你需要将URL放在双引号中,以便该行更改为:

Sheets(sheetname).Range("B" & cellRow & ":B" & cellRow).Function = "=HYPERLINK(""" & URL & """,""View Change"")"

请注意URL变量周围的额外双重引号。 Microsoft帮助文档中的示例清楚地显示了URL需要在HYPERLINK函数中的引号中,并且单元格的设置在没有这些引号的情况下中止。

相对于您标记的行[URL = Range(Value1.Address).Value]未获取URL。如果确实该行也存在问题,我们需要查看您的源数据。但是,在我的简单调试中,我将超链接添加到源数据单元格中(而不是URL的字符串),并且上面的代码行工作正常,将URL放在超链接中细胞。

在“For Each”语句中冗余地放置“.SpecialCells(xlCellTypeVisible)”似乎是不必要的,因为它已经是“rng”变量中的限定符。没有它就可以正常工作,我在调试测试中隐藏了一些源数据行,以确保它们被跳过。

答案 1 :(得分:0)

您的链接是由公式创建的 因此,您可以使用Formula Property检索它们 现在,如果您的URL's始终采用带有qoutations的字符串形式,则可以尝试以下

Dim r As Range, c As Range
Set r = Sheets("SheetName").Range("A1:A2000").SpecialCell(xlCellTypeFormulas)

For Each c In r
    Msgbox Split(c.Formula, """")(1)
Next

这将返回您的所有URL's
但是,如果它指向单元格或外部引用,您可以尝试Evaluate,如下所示:

Dim f As String, myurl As String

For Each c In r
    f = c.Formula
    myurl = Evaluate(Split(Mid(f, InStr(f, "(") + 1), ")")(0))
    MsgBox myurl
Next

这适用于以下公式:=HYPERLINK($B$1)其中$B$1包含实际路径 它将返回存储在单元格引用中的实际URL 我无法检查它是否适用于您的情况,但您可以尝试一下。

其他

您的公式省略了[friendly_name]参数,它应该显示单元格上的实际路径 如果是这样,您可以使用URL属性检索.Value 虽然你在帖子中提到过,但你确定这不起作用吗?