2016-08-14 4 views
0

Es folgt ein Satz aus meinem Arbeitsblatt:Zugriff auf eine verlinkte Zelle aus einer anderen Zelle in demselben Blatt vba

enter image description here

Zelle M7 auf die große fusionierte Zelle E6 mittels Hyperlink verwiesen wird. Mein Code muss auf die Adresse der Zielzelle von M7 (die E6 sein wird) zugreifen und diese Adresse einer Bereichsvariablen zuweisen, die "Testen" genannt wird.

Sobald ich die Adresse der hyperlinked Zielzelle (E6) mit "testen" habe, kann ich dann die Bereichsadresse von "testen" formatieren, wie ich will. Hier

ist, was ich versucht habe bisher

Dim lcell As Range 
Dim testing As Range 

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

Das gibt mir die folgende Fehlermeldung:

Run-time error: 91 

    Object variable or With block variable not set 

Antwort

2

Diese Funktion einen Verweis auf einen Hyperlink Zielbereich zurück, ob es der Hyperlink ist festgelegt durch die HYPERLINK WorkSheetFunction oder in der Hyperlink-Sammlung der Zelle.

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 

Dank ThunderFrame für die Tabellenfunktion HYPERLINK Hinweis.

+0

Dank mate. Dies ändert jedoch nur den Wert der Zelle M7 zu "TEST", statt den Wert von Zelle E6 zu "TEST" zu ändern – sukhvir

+0

Die Hyperlinks-Auflistung wird nicht immer aufgefüllt, abhängig von der Version von Excel und wie der Hyperlink festgelegt ist. – ThunderFrame

+0

@ThomasInzina, wenn ich diesen Code ausführen, bekomme ich die Fehlermeldung "Index außerhalb des Bereichs" – sukhvir

2

Dies sollte tun, was Sie wollen. Sie müssen den Inhalt der M7 Formel analysieren, so meinen Code übernimmt die M7 Formel nur enthält einen Hyperlink Formel wie:

=HYPERLINK(E6,"RSDS") 

Und die VBA wie folgt aussieht:

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 

Oder, wenn Sie möchten eine kürzere Methode, die nicht die Überprüfung der M7-Formel enthält einen Hyperlink enthält, könnten Sie verwenden:

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

Ich schlug den Vorschlag von Thomas in einigen Überprüfungen ein, um zu sehen, welche Art von Hyperlink die Zelle enthält – ThunderFrame

+0

Aus irgendeinem Grund legt der WorkSheetFunction HyperLink die DirectPrecedents-Eigenschaft des Bereichs nicht fest. [Beispiel] (https://www.dropbox.com/s/va5tea2ajxs837k/hyperlink.JPG?dl=0) –

+1

'Bereich (Bereich (" M7 "). DirectPrecedents.Address)' ist das gleiche wie 'Bereich (" M7 "). DirectPrecedents". –

Verwandte Themen