从外部数据库获取超链接
我在从外部来源获取超链接的值或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中隐藏了一些源数据行,以确保它们被跳过。