Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
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
Hyperlink zu über Listbox öffnen
03.06.2022 12:27:36
Kev
Hallo zusammen,
ich habe folgendes letztes Problem, bevor ich mein erstes VBA Projekt komplett abschließen kann:
- Ich lasse meine ListBox1 mit den Zelleninhalten aus dem Sheet ("Errors") füllen
- Den Zelleninhalten aus dem Sheet ("Errors") sind Links hinterlegt (Beim klicken auf die Links springt die Datei auf Sheet ("Materials"))
Soweit funktioniert auch alles.
Jetzt hätte ich gerne per Doppelklick auf eine Zeile in der ListBox, dass nachdem Wert der ListBox im Sheet("Errors") gesucht wird und der entsprechende Link ausgeführt wird (d.h. im ganzen wenn doppelklick listbox -> wert in "Errors" suchen -> link ausführen -> in entsprechende verlinkte Zelle in "Materials" springen)
Mein Ansatz war folgender:
Hinterlegen des Hyperlinks in den Zellen des Sheets ("Errors") - funktioniert

Sheets("Errors").Hyperlinks.Add Anchor:=Sheets("Errors").Cells(Rows.Count, 1).End(xlUp), _
Address:="", _
SubAddress:="Materials!" & zelle.Address(False, False), _
TextToDisplay:=Sheets("Errors").Cells(Rows.Count, 1).End(xlUp).Value
Füllen ListBox mit Werten aus Sheet ("Errors") - funktioniert

lzeile = Worksheets("Errors").Cells(Rows.Count, 1).End(xlUp).Row
For a = 1 To lzeile
UserForm1.ListBox1.AddItem Worksheets("Errors").Cells(a, 1).Value
Next a
lzeile2 = Worksheets("Errors").Cells(Rows.Count, 2).End(xlUp).Row
For b = 1 To lzeile2
UserForm1.ListBox1.AddItem Worksheets("Errors").Cells(b, 2).Value
Next b
Doppelklick auf wert in Listbox und dadurch Hyperlink aktivieren der den Zellen in Sheet("Errors") hinterlegt ist - funktioniert nicht

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim rngFund As Range
Dim strSuchbegriff As String
strSuchbegriff = Me.ListBox1.List(ListBox1.ListIndex, 0)
Set rngFund = Sheets("Errors").Range("A:B").Find(strSuchbegriff, _
LookIn:=xlValues, LookAt:=xlWhole)
If Not rngFund Is Nothing Then
ActiveWorkbook.FollowHyperlink Address:=rngFund.Address(False, False)
Unload Me
End If
End Sub
Hier eine Beispiel Datei:
https://www.herber.de/bbs/user/153408.xlsm
Wäre super wenn sich hier eine Lösung finden lässt.
Danke bereits im voraus.
Grüße Kev

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hyperlink zu über Listbox öffnen
03.06.2022 13:07:11
Rudi
Hallo,
einfach
rngFund.Hyperlinks(1).Follow
Gruß
Rudi
AW: Hyperlink zu über Listbox öffnen
07.06.2022 10:38:15
Kev
Hi Rudi,
Sorry für die späte Antwort, ich war über das lange Wochenende nicht am Rechner.
Irgendwie bekomm ich es einfach nicht gebacken. Wenn ich es richtig verstanden habe, dann muss der Code so aussehen?

Dim rngFund As Range
Dim strSuchbegriff As String
strSuchbegriff = Me.ListBox1.List(ListBox1.ListIndex, 0)
Set rngFund = Sheets("Errors").Range("A:B").Find(strSuchbegriff, _
LookIn:=xlValues, LookAt:=xlWhole)
If Not rngFund Is Nothing Then
rngFund.Hyperlinks(1).Follow
Unload Me
Leider macht er dabei aber nichts und springt nicht auf die entsprechende Zelle.
Er bringt mir aber auch keine Fehlermeldung. Was mache ich falsch?
Danke im voraus.
Gruß Kev
Anzeige
AW: Hyperlink zu über Listbox öffnen
07.06.2022 10:53:47
Oberschlumpf
Hi Kevin,
anstelle des .Follow-Befehls versuch es mal hiermit:

Range(rngFund.Hyperlinks(1).SubAddress).Select
ich glaub zwar, das könnte etwas "unsauber" sein, aber es funktioniert wenigstens :-)
Hilfts?
Ciao
Thorsten
AW: Hyperlink zu über Listbox öffnen
07.06.2022 11:12:00
Kev
Hi Thorsten,
generell funktioniert deine Lösung super :)
Jetzt hab ich dennoch gleich noch eine anschließende Frage.
Wenn ich die Userform mit dem

UserForm_UserForm1.Show vbModeless
öffne, dann könnte ich ja theoretisch in die anderen Tabellen der Datei wechseln.
Angenommen ich bin in einer anderen Tabelle als in "Materials", kann ich das dann folgendermaßen lösen?

ActiveWorkbook.Worksheets("Materials").Range(rngFund.Hyperlinks(1).SubAddress).Select
bzw. ist das überhaupt möglich?
Vielen Dank auf jedenfall :)
Gruß Kevin
Anzeige
AW: Hyperlink zu über Listbox öffnen
07.06.2022 13:49:42
Oberschlumpf
Hi Kevin,
sorry, manchmal versteh ich euch nich so ganz :-)
Du fragst: "...kann ich das dann folgendermaßen lösen?..."
Ich frage: Warum probierst du das nicht einfach mal aus und beobachtest, was genau passiert? :-)
(nein, ich weiß nich, ob das so geht - hab es selbst noch nich probiert)
Bin aber neugierig auf dein Feedback - reicht ja, wenn nur einer ausprobiert ;-)
Ciao
Thorsten
AW: Hyperlink zu über Listbox öffnen
07.06.2022 14:03:56
Kev
Hi Thorsten,
ich habs jetzt getestet und leider funktioniert es so nicht (Laufzeitfehler - Select Methode des Range Objektes konnte nicht ausgeführt werden).
Habe es jetzt einfach gelöst, indem ich die Tabelle "Materials" aktiviere bevor ich die Zelle anwählen lasse.
Ist vielleicht nicht die schönste Lösung, aber funktioniert :)

    Set rngFund = Sheets("Errors").Range("A:B").Find(strSuchbegriff, _
LookIn:=xlValues, LookAt:=xlWhole)
If Not rngFund Is Nothing Then
Worksheets("Materials").Activate
Range(rngFund.Hyperlinks(1).SubAddress).Select
End If
Ich bedanke mich nochmals für die Hilfe :)
Gruß Kevin
Anzeige
das ist auch nur...
07.06.2022 15:59:16
Oberschlumpf
...die halbe Miete! :-)
Hi Kevin,
ich ahnte doch, dass mein 1. Versuch "unsauber" ist :-)
Und auch deine Idee wird nicht (immer) funktionieren.
Starte mal das Userform(ular) und scroll in der Listbox ganz nach unten.
Da hast du auch Einträge aus dem Blatt "Special Material Lists"
Und egal, ob mit meiner 1. Idee, oder mit deiner Korrektur...beide Versuche landen wieder im Laufzeitfehler.
Ja, du hast recht - im 1. Schritt muss das Blatt angezeigt werden, in dem die gefundene Zelle ist - aber es muss das richtige Blatt angezeigt werden!
Dafür änder bitte deinen ganzen Code im DblClick-Ereignis so:

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim rngFund As Range
Dim strSuchbegriff As String
Dim Blattname As String
strSuchbegriff = Me.ListBox1.List(ListBox1.ListIndex, 0)
Set rngFund = Sheets("Errors").Range("A:B").Find(strSuchbegriff, _
LookIn:=xlValues, LookAt:=xlWhole)
If Not rngFund Is Nothing Then
Blattname = Replace(Split(rngFund.Hyperlinks(1).SubAddress, "!")(0), "'", "")
Sheets(Blattname).Select
Range(rngFund.Hyperlinks(1).SubAddress).Select
Unload Me
End If
End Sub
mit diesem Code wird zuerst mit REPLACE() und SPLIT() der Blattname ausgelesen, in dem die "Fehlerzelle" gefunden wurde.
Die Variable Blattname (ich hab sie genau so genannt) erhält den richtigen Wert.
Und anstelle mit deinem Sheets("Materials").Select wird mit Sheets(Blattname).Select immer das richtige Blatt angezeigt.
Und? Läufts auch bei dir?
Ciao
Thorsten
Anzeige
AW: das ist auch nur...
09.06.2022 11:07:32
Kev
Hi Thorsten,
ja das mit dem 2. Tabellenblatt war mir klar.
Meine ursprüngliche Frage war nur wie es funktioniert, das ich mit doppelklick in die Listbox dem Hyperlink folge und wie dann auf ein Tabellenblatt springen kann.
Die Fragen waren gewollt so gestellt. Hintergrund: Da ich neu im Makro bereich bin, wollte ich den Rest selber ausprobieren und lösen.
Ich hab auch eine Lösung gefunden, die für mich aktuell funktioniert:

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim rngFund As Range
Dim strSuchbegriff As String
strSuchbegriff = Me.ListBox1.List(ListBox1.ListIndex, 0)
If strSuchbegriff = "-" _
Or strSuchbegriff = "Validation Errors Materials:" _
Or strSuchbegriff = "Validation Errors Special Material Lists:" Then
Exit Sub
Else
Set rngFund = Sheets("Errors").Range("A:A").Find(strSuchbegriff, _
LookIn:=xlValues, LookAt:=xlWhole)
If Not rngFund Is Nothing Then
Worksheets("Materials").Activate
Range(rngFund.Hyperlinks(1).SubAddress).Select
End If
End If
If strSuchbegriff = "-" _
Or strSuchbegriff = "Validation Errors Materials:" _
Or strSuchbegriff = "Validation Errors Special Material Lists:" Then
Exit Sub
Else
Set rngFund = Sheets("Errors").Range("B:B").Find(strSuchbegriff, _
LookIn:=xlValues, LookAt:=xlWhole)
If Not rngFund Is Nothing Then
Worksheets("Special Material Lists").Activate
Range(rngFund.Hyperlinks(1).SubAddress).Select
End If
End If
End Sub
Deine Variante sieht zu meiner natürlich deutlich besser und kürzer aus :D
Ich werd mir deine Variante aber auch nochmal ansehen und hoffentlich auch verstehen :D
Vielen Dank für deine Mühe!
Gruß Kevin
Anzeige

117 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige