从同一张vba中的另一个单元格访问超链接的单元格

以下是我的工作表的设置:

在这里输入图像说明

单元M7超链接到大的合并单元E6。 我的代码需要从M7(这将是E6)访问目标单元格的地址,并将该地址分配给称为“testing”的范围variables。

一旦我有超链接的目标单元格(E6)的地址使用“testing”,然后我可以格式化范围地址的“testing”,但我想要的。

这是我到目前为止所尝试的

Dim lcell As Range Dim testing As Range testing = lcell.Hyperlinks(1).Range testing.Value = "TEST" 

这给了我以下错误:

  Run-time error: 91 Object variable or With block variable not set 

此函数将返回超链接目标范围的引用,无论是超链接是由HYPERLINK WorkSheetFunction设置还是在单元格的超链接集合中。

 Sub Example() Dim lcell As Range Dim TestRange As Range Set lcell = Range("A1") Set TestRange = getHyperLinkTarget(lcell) If Not TestRange Is Nothing Then TestRange.Value = "TEST" End If End Sub 

 Function getHyperLinkTarget(HSource As Range) As Range Dim address As String, formula As String formula = HSource.formula If HSource.Hyperlinks.Count > 0 Then address = HSource.Hyperlinks(1).SubAddress ElseIf InStr(formula, "=HYPERLINK(") Then address = Mid(formula, InStr(formula, "(") + 1, InStr(formula, ",") - InStr(formula, "(") - 1) End If On Error Resume Next If Len(address) Then Set getHyperLinkTarget = Range(address) On Error GoTo 0 End Function 

感谢ThunderFrame指出HYPERLINK工作表function。

这应该做你以后的事情。 您需要parsingM7公式的内容,所以我的代码假设M7公式包含一个超链接公式,如:

 =HYPERLINK(E6,"RSDS") 

而VBA看起来像:

 Sub foo() Const hyperlinkSignature = "=HYPERLINK(" Dim rng As Range Set rng = Range("M7") Dim hyperlinkFormula As String hyperlinkFormula = Range("M7").formula Dim testing As Range 'Check the cell contains a hyperlink formula If StrComp(hyperlinkSignature, Left(hyperlinkFormula, Len(hyperlinkSignature)), vbTextCompare) = 0 Then Dim hyperlinkTarget As String hyperlinkTarget = Mid(Split(hyperlinkFormula, ",")(0), Len(hyperlinkSignature) + 1) Set testing = Range(hyperlinkTarget) testing.Value = "TEST" Else 'Check if the cell is a hyperlinked cell If Range("M7").Hyperlinks.Count = 1 Then 'Credit to Thomas for this line Set testing = Range(Range("M7").Hyperlinks(1).SubAddress) testing.Value = "TEST" End If End If End Sub 

或者,如果您想要一个简单的方法来检查M7公式是否包含超链接,您可以使用:

 Dim target As Range Set target = Range(Range("M7").DirectPrecedents.Address) target.Value = "Test"