Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1492to1496
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Zieladresse für HYPERLINK()-Funktion auslesen

VBA: Zieladresse für HYPERLINK()-Funktion auslesen
17.05.2016 16:06:45
NoNet
Hallo Leute,
ich habe folgendes Problemchen (trotz langem Testen, Googlen und in der Beitragsarchiv-Suche habe ich keine Lösung gefunden und versuche es daher hier im Forum) :
In einer Tabelle habe ich einige Werte und Funktionen in Verbindung mit der HYPERLINK()-Funktion. Der angezeigte Zellwert entspricht dabei NICHT dem erzeugten Hyperlink. Ein vereinfachtes Beispiel findet ihr hier :
XLSM Datei auf OneDrive
Der VBA-Code müsste nun also z.B. für die Zelle C7 die Hyperlink-Adresse http://www.mein-toller-link.de/04711 ermitteln.
Die Problematik besteht darin, dass Excel per VBA keine Hyperlinks erkennt, die per =HYPERLINK(...) in einer Zelle erstellt wurden, die folgende VBA-Anweisungen ergeben also immer das Resultat 0 :
MsgBox ActiveSheet.Hyperlinks.Count
MsgBox Range("C7").Hyperlinks.Count
Ich habe Ansätze gefunden und auch selbst ermittelt, um zu überprüfen, OB eine Zelle (evtl.) einen Hyperlink beinhaltet (genauer : ob der STRING "HYPERLINK(" in der Zellfunktion enthalten ist), aber das ist NICHT das, was ich benötige !
Für ganz "Schlaue" : Bitte keine Lösungsvorschläge wie "Prüfe doch einfach, welcher Wert in Spalte B steht" - Das wäre das Pferd von hinten aufgezäumt - das möchte ich nicht, denn es geht mir hier um eine grundsätzliche Möglichkeit, die (wie auch immer zusammengestzten) Hyperlink-Adressen auszulesen...
Vielleicht hat einer von euch einen Lösungsansatz ?
Viel Spaß und Erfolg beim Tüfteln und DANKE schonmal vorab :-)
Salut, NoNet

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Tja, die Xl-Fkt erzeugt keine echten HLs, ...
17.05.2016 16:45:46
Luc:-?
…NoNet;
damit hatte ich mich wohl vor 1-2 Jahren mal befasst und wohl auch in diesem Zusammenhang Lösungen gefunden. Jetzt müsste ich aber erstmal die damalige Datei finden… ;-)
Also bis dahin,
Gruß, Luc :-?

Habe jetzt nicht gesucht, sondern mal eben ...
20.05.2016 04:34:17
Luc:-?
…neu pgmmiert, NoNet;
falls du dich überhpt noch dafür interessierst, denn bisher hast du dich ja, wie leider von dir gewohnt, nicht noch mal gemeldet!
Grundlage ist bei meiner Lösung, dass die XlFkt als unechter HL natürlich weder die entsprd ZellEigenschaft begründet noch das von dir verwendete Ereignis auslöst. Was aber immer zuerst bei Klick auf einen Zell-HL, egal welcher Art, ausgelöst wird, ist das SelectionChange-Ereignis. Folglich kannst du nur das verwenden und kommst dann um das Parsen der Fml nicht herum:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Const txHL$ = "HYPERLINK(", txRelSym$ = "(,)"
Dim i As Long, k(1) As Long, p(2) As Long, fmHL As String, erg As Variant
On Error Resume Next
If Target.HasFormula Then
If Target.Text  "" And CBool(InStr(Target.Formula, txHL)) Then
fmHL = Split(Target.Formula, txHL)(1)
k(0) = Len(fmHL) - Len(Replace(fmHL, Left(txRelSym, 1), ""))
k(1) = Len(fmHL) - Len(Replace(fmHL, Right(txRelSym, 1), ""))
For i = 1 To k(1) - k(0)
fmHL = Left(fmHL, InStrRev(fmHL, Right(txRelSym, 1)) - 1)
Next i
erg = Me.Evaluate(fmHL)
Do While IsError(erg)
For i = 0 To 2
p(i) = InStrRev(fmHL, Mid(txRelSym, i + 1, 1))
Next i
If CBool(p(1)) Then
If p(0)  p(2) Then
fmHL = Left(fmHL, p(1) - 1)
ElseIf Len(fmHL) > 1 Then
fmHL = Left(fmHL, Len(fmHL) - 1)
Else: Exit Do
End If
ElseIf CBool(p(2)) Then
fmHL = Left(fmHL, p(2))
ElseIf Len(fmHL) > 1 Then
fmHL = Left(fmHL, Len(fmHL) - 1)
Else: Exit Do
End If
erg = Me.Evaluate(fmHL)
Loop
MsgBox IIf(IsError(erg), "Irregulärer HL", erg)
End If
End If
End Sub
Ich will mal hoffen, dass diese PgmVersion genügend HL-Varianten abdeckt. Evtl DezimalKommata müssen ggf getauscht wdn und ) in Texten (ohne ihr Ggstück) führen zu Fehlern.
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …

Anzeige
Danke @alle - Gewohnheiten überprüfen ;-)
23.05.2016 16:24:48
NoNet
Hi @alle,
Danke erstmal für eure Beiträge. Ich dachte mir schon, dass es keine 100%-Lösung geben wird.
Die programmatische Ermittlung der "HYPERLINK("-Funktion bleibt wohl die einzige Lösung.
Luc's Code funktioniert auch recht gut - ich denke vorerst wird mir dieser Workaround (ergänzt um die Möglichkeit "echte" Hyperlinks zu überprüfen) genügen - Danke dafür.
@Luc : Den Zusatz "wie leider von dir gewohnt" solltest du nochmal überprüfen : Ich gebe zu meinen (wenigen) Fragen (fast ?) immer ein Feedback. Da ich aber (wie vielleicht dem ein oder anderen aufgefallen ist) in den letzten 2 Jahren nur noch sehr sporadisch hier ins Forum hinein schaue (aus Zeitgründen - nicht aus mangelndem Interesse !), dauert es hin und wieder einige Tage bis zum abschließenden Feedback - so wie auch in DIESEM Thread ;-).
Salut, NoNet

Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige