我在从外部源获取超链接的值或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
答案 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
虽然你在帖子中提到过,但你确定这不起作用吗?