2016-08-14 69 views
0

另一個細胞繼超鏈接的單元格是我的工作表中的設立:訪問在同一張VBA

enter image description here

細胞M7超鏈接到大合併單元格E6。我的代碼需要從M7(這將是E6)訪問目標單元的地址,並將該地址分配給稱爲「測試」的範圍變量。

一旦我有超鏈接目標單元格(E6)的地址使用「測試」,然後我可以格式化範圍地址的「測試」,但我想要的。

這裏是我到目前爲止已經試過

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 

回答

2

這個函數會返回一個超鏈接的目標範圍參考無論是超鏈接由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工作表函數。

+0

謝謝隊友。但是,這只是將單元格M7的值更改爲「測試」,而不是將單元格E6的值更改爲「測試」。 – sukhvir

+0

根據Excel的版本以及超鏈接的設置方式,超鏈接集合並不總是被填充。 – ThunderFrame

+0

@ThomasInzina當我運行該代碼時,出現錯誤,提示「下標超出範圍」 – sukhvir

2

這應該做你以後的事情。您需要解析M7式的內容,所以我的代碼假設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" 
+0

我在一些檢查中包裝了Thomas的建議以查看單元格包含的超鏈接的類型 – ThunderFrame

+0

由於某些原因,WorkSheetFunction HyperLink未設置Range的DirectPrecedents屬性。 [範例](範圍(「M7」).DoublePrecedents.Address)'與Range(「範例」)相同(https://www.dropbox.com/s/va5tea2ajxs837k/hyperlink.JPG?dl=0) – 2016-08-14 09:29:45

+1

' M7" )。DirectPrecedents'。 – 2016-08-14 09:31:08