Zieladresse aus Hyperlink-FORMEL auslesen
 |
Betrifft: Zieladresse aus Hyperlink-FORMEL auslesen
von: Karsten
Geschrieben am: 01.08.2014 18:21:45
Hallo,
ich habe in einem Sheet eine Menge per HYPERLINK()-Formel erzeugte Zellen und möchte per VBA prüfen, ob die jeweiligen Dateien existieren. Letztendlich brauche ich also das Hyperlink-Ziel.
Beispiel:
A1 enthält "C:\Windows\" und hat den Namen "Basispfad"
B1 enthält "win.ini"
C1 enthält "=HYPERLINK(VERKETTEN(A1;B1);B1)"
D1 enthält "=HYPERLINK(Basispfad&B1;B1)"
Klick auf C1 und D1 öffnet jeweils die win.in.
Frage: Wie komme ich per VBA aus C1 oder D1 auf "C:\windows\win.ini" ?
Das Hyperlink-Objekt ist unbrauchbar, weil es nicht mit Formeln funktioniert.
Vermutlich muss ich das erste Argument aus der Formel rausparsen. Kann ich. Aber wie kann ich dann z.B. "Basispfad&B1" auswerten? Evaluate() kann das nicht.
Vielen Dank
Karsten
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Matthias L
Geschrieben am: 01.08.2014 18:51:20
Hallo Karsten
Tabelle1
| A | B | C | D |
1 | C:\Windows\ | win.ini | win.ini | win.ini |
Formeln der Tabelle |
Zelle | Formel | C1 | =HYPERLINK(VERKETTEN(A1;B1);B1) | D1 | =HYPERLINK(Basispfad&B1;B1) |
|
Namen in Formeln | Zelle | Name | Bezieht sich auf | D1 | Basispfad | =Tabelle1!$A$1 |
|
|
Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Ich bin zwar kein Profi, habe es aber mal nachgestellt.
Bei mir hat es funktioniert.
In beiden Zellen wird die Win.ini geöffnet.
Oder ich habe Dich total falsch verstanden, dann schon jetzt mal Sorry dafür
Gruß Matthias
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Karsten
Geschrieben am: 02.08.2014 17:53:23
Hallo Matthias,
das hast Du völlig falsch verstanden. Klar funktioniert der Klick. Die Frage war:
Wie komme ich per VBA aus C1 oder D1 auf "C:\windows\win.ini" ?
Ungefähr so was suche ich:
Sub test()
Dim rng As Excel.Range
Dim strLinktarget As String
Set rng = ActiveSheet.Range("C1")
If InStr(1, rng.Formula, "HYPERLINK") > 0 Then
' hier fehlt der Code, der mir aus der Formel das Linkziel extrahiert
strLinktarget = ???
End If
Debug.Print strLinktarget
End Sub
Am Ende soll im Direktfenster "C:\Windows\win.ini" stehen. Leider habe ich keine Idee. Und möchte mich so lange wie möglich dagegen wehren, die Formel (mit allen syntaktischen Varianten) selbst zu parsen und die Einzelteile auszuwerten. Das muss doch einfacher gehen! Oder?
Viele Grüße
Karsten
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Christian
Geschrieben am: 02.08.2014 18:17:01
Hallo Karsten,
eine Verständnisfrage:
Du hast das Ziel in A1 und B1 hinterlegt?
Warum nicht per VBA diese Zellen auslesen und den Hyperlink prüfen?
MfG Christian
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Karsten
Geschrieben am: 02.08.2014 18:33:22
Hallo Christian,
das ist ein stark vereinfachtes Beispiel. Ich Echt bekomme ich irgendein Sheet, über das ich nichts weiß, und muss prüfen, ob es die Dateien in den Hyperlinks gibt. Aber dazu muss ich sie erst mal auslesen.
Viele Grüße
Karsten
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Christian
Geschrieben am: 02.08.2014 18:50:41
Hallo Karsten,
hast Du schon mal im Archiv gesucht?
Da sind einige Beispiele vorhanden, als VBA-Profi kannst Du die bestimmt anpassen!
MfG Christian
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Karsten
Geschrieben am: 02.08.2014 19:29:55
Hallo Christian,
ja, ich habe gesucht. Und nichts gefunden.
Wenn Du ein Beispiel aus der Praxis willst:
=WENN($C24>"";HYPERLINK((VERKETTEN(Bildpfad;$C24&FD$10));$C24&FD$10);"")
In C24 steht der Prefix der Datei ("win") und in FD10 der Suffix (".ini"). Bildpfad wie im Beispiel. Es muss aber auch für beliebige andere Formeln funktionieren, die einen gültigen Pfad zusammensetzen. Der Code kommt in ein AddIn und färbt nicht vorhandene Dateien (=Zellen) rot ein. Ich kann also von gar nichts ausgehen, außer eben der Formel.
Wenn es
seeehr einfach ist das auszulesen dann mach doch mal einen konkreten Vorschlag. Find ich nämlich überhaupt nicht einfach.
Viele Grüße
Karsten
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Karsten
Geschrieben am: 02.08.2014 19:31:25
Oh sorry, das seeehr einfach hab ich aus dem Beitrag von Thorsten eingemixt.
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Christian
Geschrieben am: 02.08.2014 20:17:27
Hallo Karsten,
Du bist der VBA-Profi, ich schätze mein VBA-Wissen weitaus geringer ein.
Aber ich nehme Dir nicht ab, dass Du nichts gefunden hast!
https://www.herber.de/forum/archiv/712to716/713705_Umkehrfunktion_zu_HYPERLINK.html
https://www.herber.de/forum/archiv/1208to1212/1208523_HYPERLINK_Quickinfo_aus_Zelle_lesen.html
Das sind nur zwei von ca. 340 Treffern hier im Forumsarchiv, bei Google ca. 1000mal so viele Treffer..
MfG Christian
 |
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Karsten
Geschrieben am: 02.08.2014 20:27:03
Hallo Christian,
ich revidiere: ich habe nichts zu meinem Problem passendes gefunden.
Der erste Link verlangt Änderungen am Excel-Sheet (kann ich nicht machen), beim zweiten steht der komplette Pfad schon in einer Zelle. Das ist alles leicht und nicht mein Problem.
Lass den Thread einfach offen stehen, vielleicht hat noch jemand eine geniale Idee.
Viele Grüße
Karsten
 |
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Oberschlumpf
Geschrieben am: 02.08.2014 19:00:01
Hi Karsten,
"...das ist ein stark vereinfachtes Beispiel...."
Tja, wenn es in der Original-Datei gaaaanz anders aussieht, als in deinem stark vereinf. Bsp, dann zeig uns doch am besten mal genau das, was wo wie im Original steht.
Natürlich, wenn erforderlich, Realdaten gegen Bsp-daten ersetzen - Struktur aber beibehalten
Denn anhand deines Bsps is es seeehr einfach, per VBA A1 + B1 auszulesen, zum Pfad zusammenbasteln, als Ergebnis auszugeben.
Anderer Tipp:
Um herauszufinden, ob Datei existiert, reicht ein Klick auf den Hyperlink.
Wenn Hyperlink funktioniert, ist Datei vorhanden, ist deine Frage beantwortet.
Ciao
Thorsten
 |
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Oberschlumpf
Geschrieben am: 02.08.2014 20:06:24
hi karsten,
ja,ich war das mit seeeehr einfach - und das war auf dein bsp mit A1+B1 bezogen!
Zeig uns doch mal ne Bsp-Datei.
Einträge in den richtigen Zellen.
Ciao
Thorsten
 |
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Karsten
Geschrieben am: 02.08.2014 20:18:58
Hallo Thorsten,
ja, hab ich dann auch gemerkt ;-)
Eine Beispieldatei ändert nichts.
Folgendes ist gegeben: Ein Loop durch alle Zellen einer beliebigen, unbekannten, Datei. Darin sind HYPERLINK-Formeln enthalten, die mittels irgendeiner Verkettung einen gültigen Pfad zusammenbauen. Normalerweise sind die Dateien vorhanden, dann ist alles gut. Aber manchmal sind sie verschoben.
Ich will alle Zellen markieren, in denen es keine Dateien zu den Links gibt.
Ergo muss ich aus der HYPERLINK-Formel den Pfad ermitteln.
Wenn Du das sauber aus dem Beispiel (und vielleicht noch dem Praxisbeispiel oben) schaffst funktioniert es überall. Klar?
Viele Grüße
Karsten
 |
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Oberschlumpf
Geschrieben am: 02.08.2014 22:40:47
Hi
...Eine Beispieldatei ändert nichts. ...
hihi, nein, nein, DU kannst NICHT entscheiden, ob für MICH ne Bsp-datei was ändert oder nich.
Aber ok, du willst nich...dann will ich auch nich.
Ich bin raus
Thorsten
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Mullit
Geschrieben am: 03.08.2014 01:54:17
Hallo,
in Bezug auf Deinen 1.Post:
Vermutlich muss ich das erste Argument aus der Formel rausparsen. Kann ich.
Aber wie kann ich dann z.B. "Basispfad&B1" auswerten?
Wenn das rausparsen schon hinhaut und Du nur noch "Basispfad&B1" auf Existenz überprüfen mußt,
könnte z.B. die
Dir-Funktion das sein, was Du suchst....
Gruß,
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Karsten
Geschrieben am: 03.08.2014 15:37:03
Hallo Mullit,
das erste Argument rausparsen würde ich nur als letzten Ausweg machen. Ich hatte gehofft dass jemandem hier was eleganteres einfällt.
Aber selbst dann: wie mache ich aus "Basispfad&B1" oder "Verketten(A1;B1)" oder "VERKETTEN(Bildpfad;$C24&FD$10));$C24&FD$10)" (oder einer beliebigen anderen Kombination) einen Pfad? Es gibt keine Excel-Funktion, die ich aus VBA aufrufen kann und die das auflöst, oder? Ich hatte auf Evaluate() gehofft, das kann aber nicht mal "A1&B1".
Ich könnte es als Formel in eine Zelle schreiben und dann den Wert auslesen. Aber dann funktioniert es wieder nicht mit geschützten Sheets. Zu dumm...
Dir() kenne ich. Sobald ich einen Pfad habe ist alles ok.
Viele Grüße
Karsten
 |
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Mullit
Geschrieben am: 04.08.2014 00:42:40
Hallo Karsten,
tja, dann müsstest Du Dich doch ums Rausparsen kümmern;
bisher fällt mir da zunächst auch nichts anderes ein ....
Da gäbe es z.B. drei Möglichkeiten:
Option Explicit
'Hyperlink/Verketten-Formel:
Public Sub prcHyperVerketten()
With ActiveSheet.Cells(1, 3)
MsgBox Dir(Evaluate(Mid$(String:=.Formula, Start:=InStr(1, .Formula, "(", vbTextCompare) + 1, _
Length:=InStr(1, .Formula, ")", vbTextCompare) - InStr(1, .Formula, "(", vbTextCompare))))
End With
End Sub
'Hyperlink/Basispfad-Formel:
Public Sub prcHyperBasispfad()
MsgBox Dir(ThisWorkbook.Names("Basispfad").RefersToRange & ActiveSheet.Cells(1, 4))
End Sub
'Hyperlink/UnbekannterName-Formel:
Public Sub prcHyperUnknownName()
With ActiveSheet.Cells(1, 4)
MsgBox Dir(ThisWorkbook.Names(Mid$(String:=.Formula, Start:=InStr(1, .Formula, "(", _
vbTextCompare) + 1, Length:=InStr(1, .Formula, "&", vbTextCompare) - _
InStr(1, .Formula, "(", vbTextCompare) - 1)).RefersToRange & ActiveSheet.Cells(1, 4))
End With
End Sub
VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel
Code erstellt und getestet in Office 12
Die anderen Kombis kannst Du ja selbst mal zusammenbauen...
Gruß Mullit,
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Mullit
Geschrieben am: 04.08.2014 02:05:30
Hallo,
in 2) und 3) muß es natürlich richtig heißen:
'...
& ActiveSheet.Cells(1, 2)
'...
Oder Du ermittelst die Zelle ebenfalls aus dem Formel-String....
Gruß,
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Karsten
Geschrieben am: 06.08.2014 17:55:57
Falls noch mal jemand so krude Probleme hat anbei das finale Ergebnis:
'---------------------------------------------------------------------------------------
' Procedure : HyperlinkzielFinden
' Date : 06.08.2014
' Author : Karsten Pries (pries@gmx.de)
' Purpose : extrahiert aus einer Hyperlink-Formel das HL-Ziel.
' Übergeben wird eine einzelne Zelle
'---------------------------------------------------------------------------------------
Private Function HyperlinkzielFinden(rng As Range) As String
If UserMode Then On Error GoTo Error_HyperlinkzielFinden
Dim i As Integer, j As Integer
Dim intKlammerlevel As Integer
Dim intEndeLinkteil As Integer
Dim strFormula As String
Dim rngEval As Range
If Not rng.HasFormula Then Exit Function
If IsError(rng) Then Exit Function
If rng.Value = "" Then Exit Function ' dann wird beim Hyperlink kein Text angezeigt,
' die wollen wir nicht prüfen
If rng.Parent.ProtectContents Then
MsgBox "Auf geschützten Arbeitsblättern funktioniert das nicht.", vbExclamation, _
"HyperlinkzielFinden"
Exit Function
End If
strFormula = rng.Formula
i = InStr(1, strFormula, "HYPERLINK(", vbTextCompare)
If i = 0 Then Exit Function
For j = i + 9 To Len(strFormula) - 1
' durchgehen und passende schließende Klammer finden
Select Case Mid$(strFormula, j, 1)
Case "("
intKlammerlevel = intKlammerlevel + 1
Case ")"
intKlammerlevel = intKlammerlevel - 1
Case ","
' das erste gefundene Komma trennt die zwei HYPERLINK-Argumente.
If intKlammerlevel = 1 Then
intEndeLinkteil = j - 1
' Der Rest interessiert uns nicht
Exit For
End If
End Select
Next j
' die gefundene Formel in der Zelle gaaaanz rechts unten auswerten.
' In VBA geht das nicht ohne extreme Verrenkungen
Set rngEval = rng.Parent.Cells(.Rows.Count, .Columns.Count)
If rngEval.Value <> "" Then
MsgBox "Letzte Zelle auf dem Blatt ist nicht leer, kann nichts auswerten.", _
vbExclamation, "HyperlinkzielFinden"
Else
rngEval.Formula = "=" & Mid(strFormula, i + 10, intEndeLinkteil - (i + 9))
If Not IsError(rngEval) Then
HyperlinkzielFinden = rngEval.Text
End If
rngEval.Formula = ""
End If
Exit_HyperlinkzielFinden:
Exit Function
Error_HyperlinkzielFinden:
MsgBox Err.Number & ": " & Err.description & vbCrLf & _
" in Funktion HyperlinkzielFinden.", vbCritical, "mdlAllgemein"
Resume Exit_HyperlinkzielFinden
End Function
 |
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Karsten
Geschrieben am: 06.08.2014 18:10:30
Da habe ich glatt beim formatieren fürs Web noch einen Fehler eingebaut. Unten fehlt die Referenz auf das Arbeitsblatt. So ist es richtig:
[...]
' die gefundene Formel in der Zelle gaaaanz rechts unten auswerten.
' In VBA geht das nicht ohne extreme Verrenkungen
With rng.Parent
Set rngEval = .Cells(.Rows.Count, .Columns.Count)
End With
If rngEval.Value <> "" Then
[...]
Betrifft: AW: Zieladresse aus Hyperlink-FORMEL auslesen
von: Mullit
Geschrieben am: 06.08.2014 21:41:33
Hallo,
was schreibst Du Dir da für Hieroglyphen zusammen??
Falls noch mal jemand so krude Probleme hat...
...siehe 3 Posts weiter oben...
MsgBox "Auf geschützten Arbeitsblättern funktioniert das nicht."
klar geht das; s.o.
....VBA-Profi....
Gruß,
Beiträge aus den Excel-Beispielen zum Thema "Zieladresse aus Hyperlink-FORMEL auslesen"