从外部数据库获取超链接

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

我有一个单元格,具有以下公式:

=HYPERLINK([@[CHANGE_LINK]]) 

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

在我的VBA子我有以下几点:

 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转换为VBAvariables?

我已经尝试了多种方式来做到这一点,没有人似乎得到的url:

 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 

2015年3月27日更新

我使用下面的代码,这应该工作。 但是它不会将文本作为string进行检索。 它似乎不允许我在脚本中使用它…不知道为什么..

 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 

您的链接是由公式创build的。
所以你可以通过使用Formula Property来检索它们。
现在,如果你的URL's总是以string的forms出现,你可以试试下面

 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包含实际path。
它将返回存储在单元格引用中的实际URL
我不能检查它是否适合你的情况,但你可以试试看。

额外:

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

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

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

请注意URLvariables周围的额外双引号。 Microsoft帮助文档中的示例清楚地显示了HYPERLINK函数中的URL需要用引号括起来,并且单元格的设置没有引用。

相对于您标记的url[URL = Range(Value1.Address).Value],因为没有获取url。 如果确实有问题,我们需要查看您的源数据。 但是,在我简单的debugging中,我添加了超链接到源数据单元格(不是一个URL的string),上面的代码行很好地把URL放在单元格的超链接之外。

把“.SpecialCells(xlCellTypeVisible)”冗余地放在“For Each”语句中似乎是不必要的,因为它已经是“rng”variables中的限定符。 没有它,对我来说工作得很好,而且我在debuggingtesting中隐藏了一些源数据行,以确保它们被跳过。