从同一张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"