Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ereignis "Hyperlink angeklickt" erkennen/reagieren

Forumthread: Ereignis "Hyperlink angeklickt" erkennen/reagieren

Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 13:53:13
Helmut
Hallo,
ich habe hier eine Excel-Tabelle mit einem Hyperlink, der auf eine Internet-Adresse zeigt. Also beim Klick auf diesen Link soll die Internet-Adresse aufgerufen werden.
In Abhängigkeit von einem Parameter (Checkbox) soll nun vor dem Aufruf des Links ein Text an die URL angehängt werden.
Das Anhängen des zusätzlichen Textes soll in VBA erfolgen.
Frage:
Wie bekomme ich in VBA mit(durch welches Ereignis), dass der Anwender auf den Link geklickt hat?
Damit ich in Abhängigkeit von dem Parameter den zusätzlichen Text anhängen kann und dann erst den Link per VBA aufrufen kann.
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 14:05:55
Mullit
Hallo,
mit einem kleinen Hack: Du lässt den Hyperlink mit der Adresse auf sich selbst verweisen und nutzt das Worksheet_FollowHyperlink-Ereignis, in welchem Du mit der FollowHyperlink-Methode auf Deine eigentliche Adresse verweist.
Gruß, Mullit
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 14:15:30
Mullit
Hallo,
ah da fällt mir grad noch ein, Du könntest natürlich auch über ein CheckBox-Event einfach die Hyperlink-Adresse über ihre Eigenschaft umschreiben, wäre wohl noch einfacher...
Gruß, Mullit
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 14:25:41
Helmut
Ich glaube mit dem CheckBox-Event geht das nicht, ich habe nämlich nicht nur einen Hyperlink in der Tabelle sondern Hunderte.
Ich versuche es mal mit Pseudocode zu beschreiben:
Begin
Wenn irgendein Hyperlink angeklickt Dann
Wenn Checkbox is checked Dann
begin
"Anzuzeigenden Text" an den Hyperlink hinten dran hängen;
Hyperlink aufrufen;
end
else Original-Hyperlink ohne zusätzlichen Text aufrufen;
End
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 14:46:00
Helmut
Das Ereignis FollowHyperlink habe ich gefunden. Dort habe ich zum Test einfach mal eingebaut:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Debug.Print Target.Address
Debug.Print Target.Name
Target.Follow NewWindow:=True, AddHistory:=True
End Sub
Da hätte ich nun schon mal alle Infos, die ich brauche. Den Target.Namen werde ich nun an den Target.Adress hängen wenn die Checkbox aktiv ist und diesen neu zusammengebauten Link dann aufrufen.
Allerdings wird der Link bereits vor dem FollowHyperlink aufgerufen und mit dem Target.Follow ruft er sich dann rekursiv immer wieder selbst auf?
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 14:57:57
Mullit
Hallo,
immer langsam, doch das geht auch einfach mit einem CheckBox-Event:
Option Explicit

Private Sub CheckBox1_Click()
Dim objHyperlink As Hyperlink
Dim strPath As String
strPath = "http://www.herber.de/forum/archiv/1540to1544/t1543505.htm"
For Each objHyperlink In ActiveSheet.Hyperlinks
   objHyperlink.Address = IIf(CheckBox1.Value, strPath & "#1543505", strPath)
Next
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 14

Gruß, Mullit
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 15:14:08
Mullit
Hallo nochmal,
...und so noch etwas besser...
Option Explicit

Private Sub CheckBox1_Click()
Dim objHyperlink As Hyperlink
Dim strPath As String, strAddress As String
strPath = "http://www.herber.de/forum/archiv/1540to1544/t1543505.htm"
strAddress = IIf(CheckBox1.Value, strPath & "#1543505", strPath)
For Each objHyperlink In ActiveSheet.Hyperlinks
   objHyperlink.Address = strAddress
Next
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 14

Gruß, Mullit
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 15:37:11
Helmut
Ja, die Idee hatte ich auch schon.
Im Prinzip gibt es zwei Lösungsansätze
1. Immer nur den jeweils angeklickten Link bei Bedarf vor dem Aufruf aufbereiten (FollowHyperLink)
2. Wenn er die Checkbox checkt bzw. uncheckt alle im Sheet vorhandenen Links aufbereiten, so dass sie bei folgenden Klicks bereits korrekt aufbereitet zur Verfügung stehen.
Die Lösung 2 hat aber m. E. folgenden Nachteil:
Alle Links die neu angelegt wurden, seitdem die Checkbox das letzte mal aktiviert wurde, haben ggfs. den falschen "Zustand".
Ok man könnte bei jeder Link-Neuanlage die Methode aufrufen, die alle Links auf den korrekten Zustand bringt.
Aber ich fände die Lösung 1 eleganter. Allerdings bin ich jetzt schon drei mal in das Rekursionsproblem reingetappt :-(
Wie kann man bei Lösung 1 verhindern, das er den Link aufruft, bevor er in die Worksheet_FollowHyperlink - Routine springt?
Wenn das nicht geht, werde ich wohl die Lösung 2 versuchen.
Besten Dank
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 16:03:50
Helmut
Ich denke das Rekursions-Problem habe ich nun in den Griff bekommen (Abbruch-Bedingung eingebaut).
Aber dummerweise ruft er den Link noch zweimal auf:
Den "falschen/unaufbereiteten Original"-Link im Sheet und dann noch den korrekt "aufbereiteten" Link in der Worksheet_FollowHyperlink - Methode?
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 16:31:30
Mullit
Hallo,
ah Du schießt etwas schnell, zunächst mal hierzu:
Wie kann man bei Lösung 1 verhindern, das er den Link aufruft,
bevor er in die Worksheet_FollowHyperlink - Routine springt?

Gar nicht, deswegen würdest Du die Subaddress des Hyperlinks bei dem Hack auf die Ursprungszelle verweisen lassen und die gesamte Hyperlinkabhandlung im Event machen.
Du müsstest die Adressen dann gesondert einlesen, das machts auch nicht wirklich besser, deswegen bleiben wir zunächst mal bei Ansatz 2:
Mach mal n Beispiel wie Deine Hyperlinks und die Textanhänge aussehen, am besten mit ner Bsp.-mappe...
Gruß, Mullit
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 17:14:55
Mullit
Hallo nochmal,
..hmm obwohl man natürlich auf die Addressen bspw. über die Zellwerte zugreifen könnte, sofern sie dort enthalten sind, dann würde auch der 1. Ansatz gehen, aber mach am besten mal n Beispiel...
Gruß, Mullit
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 18:21:09
Helmut
Hier das Beispiel:
https://www.herber.de/bbs/user/111709.xlsm
Funktioniert soweit super.
Allerdings ruft er halt die Seite 2 x auf :-(
Andererseits brauche ich aber die Infos aus dem Originallink (Address, Name) um den neuen Link zusammenzubauen.
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
23.02.2017 22:42:58
Helmut
Ich hatte das Kontrollkästchen vergessen.
Vielleicht hat ja noch jemand eine Idee, wie man den ersten Default-Aufruf bei Variante 1 vermeiden kann?
Dann gäbe es theoretisch noch eine dritte Möglichkeit:
Den Link nicht als "Link" deklarieren, sondern zwei Spalten definieren:
Spalte 1 enthält die URL als reinen Text und in
Spalte 2 steht der Text der bei gecheckter Checkbox an die URL angehängt werden soll.
Wenn er auf den (Text-)Link klickt wird in VBA der eigentliche Link generiert und dann aufgerufen.
Aber vermutlich ist die Variante 2 noch besser als diese etwas umständliche Lösung.
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
24.02.2017 09:36:30
Mullit
Hallo,
mit Deinem Bsp. kann man irgendwie wenig anfangen, Du sprachst von mehreren hundert Links, dabei ist auch entscheidend wie sie aufgebaut sind und ob die Textanhänge sich ändern.
Das Herber-Bsp. nützt da wenig, das mußt zeigen wie vom Prinzip her Deine Originaldaten aufgebaut sind.
Zur ersten Variante gibt's keine andere Möglichkeit, zumal sich offenbar die Urls bei dir nicht als Volltext in der Zelle befinden
Aber mal als Ansatz für Dich: Wenn wie im Bsp. bei Deinen Originaldaten die Textanhang-Links sich dadurch von den normalen Links unterscheiden, daß sie keinen Slash am Ende haben, müsstest Du darauf beim Einlesen abfragen und dann ggf. den Anhang setzen...
Mit einer zusätzlichen Spalte geht's natürlich auch, damit solltest Du auch schon die 1.Variante selbst gebacken kriegen...
Gruß, Mullit
Anzeige
AW: Ereignis "Hyperlink angeklickt" erkennen/reagieren
24.02.2017 13:41:37
Helmut
Ich habe mal die Lösung 2 quick and dirty umgesetzt: Alle Links im Sheet updaten, sobald er die Checkbox ("Alle Links aufbereiten") checkt/uncheckt, so dass sie gleich "wie aktuell gewünscht" vorliegen.
https://www.herber.de/bbs/user/111727.xlsm
Die Anzahl bzw. der Aufbau der Links hat m. E. mit der Funktionalität nichts zu tun. Es soll einfach für alle Links der "Anzuzeigende Text" an die "Adresse" angehängt werden bzw. entfernt werden (s. Hyperlink bearbeiten).
Aus meiner Sicht Ziel somit soweit erreicht - Super - Besten Dank für die Hilfe.
Anzeige
Na dann doch erledigt! owT
24.02.2017 15:47:01
Luc:-?
:-?
AW: Na dann doch erledigt! owT
24.02.2017 16:01:52
Helmut
Ja insofern erledigt, da der UseCase mit der "Lösung 2" erfolgreich abgebildet werden kann.
Vielleicht hat ja noch jemand einen schlaue Idee und bekommt es auch mit der "Lösungsidee 1" hin. Wäre aber Nice to have.
;
Anzeige
Anzeige

Infobox / Tutorial

Hyperlink-Ereignisse in Excel erkennen und steuern


Schritt-für-Schritt-Anleitung

  1. Hyperlink erstellen:

    • Füge einen Hyperlink in deine Excel-Tabelle ein. Klicke mit der rechten Maustaste auf die Zelle, wähle "Hyperlink" und gib die gewünschte URL ein.
  2. VBA-Editor öffnen:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Code für das Ereignis hinzufügen:

    • Wähle das entsprechende Arbeitsblatt im Projekt-Explorer aus und füge den folgenden Code ein:
    Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
       Debug.Print Target.Address
       Debug.Print Target.Name
       ' Hier kann der zusätzliche Text angehängt werden
       If CheckBox1.Value Then
           Target.Address = Target.Address & "?" & "AnzuzeigenderText"
       End If
       Target.Follow NewWindow:=True, AddHistory:=True
    End Sub
  4. Checkbox einfügen:

    • Füge eine Checkbox in dein Arbeitsblatt ein und verlinke sie mit dem oben genannten Code, um den Hyperlink anzupassen, bevor er aufgerufen wird.
  5. Testen:

    • Klicke auf den Hyperlink, während die Checkbox aktiviert oder deaktiviert ist, um zu sehen, ob der Link korrekt aufgerufen wird.

Häufige Fehler und Lösungen

  • Problem: Der Hyperlink wird zweimal aufgerufen.

    • Lösung: Stelle sicher, dass du die Target.Follow-Methode nur einmal in deinem Code aufrufst. Verwende eine Abbruchbedingung, um ein rekursives Aufrufen zu vermeiden.
  • Problem: Hyperlink anzuzeigender Text lässt sich nicht ändern.

    • Lösung: Ändere den Hyperlink-Text direkt im Excel durch einen Rechtsklick auf den Hyperlink und Auswahl von "Hyperlink bearbeiten".

Alternative Methoden

  • Direkte Textlinks: Anstatt Hyperlinks zu verwenden, kannst du zwei Spalten nutzen: eine für die URL und eine für den anzuzeigenden Text. Bei einem Klick auf den Text kannst du den Link in VBA generieren und aufrufen.

  • Excel Link verkürzen: Nutze Online-Dienste, um lange URLs zu verkürzen. Dies kann die Übersichtlichkeit erhöhen, wenn du viele Links verwaltest.


Praktische Beispiele

  1. Anpassung eines Hyperlinks:

    • Angenommen, du hast einen Hyperlink zu http://www.example.com. Wenn die Checkbox aktiv ist, füge ?ref=xyz zur URL hinzu, wodurch der Link zu http://www.example.com?ref=xyz wird.
  2. Massenänderung von Hyperlinks:

    • Mit einem VBA-Skript kannst du alle Hyperlinks in einem Arbeitsblatt durchlaufen und den anzuzeigenden Text oder die URL basierend auf einer Checkbox anpassen.

Tipps für Profis

  • Verwenden von worksheet_followhyperlink: Diese Methode ist nützlich, um Hyperlink-Ereignisse zu erkennen, ohne dass der Benutzer dies merkt. Experimentiere mit verschiedenen Bedingungen, um die Benutzererfahrung zu verbessern.

  • Dokumentation: Halte deinen VBA-Code gut dokumentiert, um später Änderungen oder Erweiterungen zu erleichtern.


FAQ: Häufige Fragen

1. Wie kann ich die Hyperlink-Adresse dynamisch ändern? Du kannst die Adresse im Worksheet_FollowHyperlink-Ereignis anpassen, indem du die Target.Address-Eigenschaft entsprechend änderst.

2. Was ist der Unterschied zwischen einem Hyperlink und einem normalen Textlink? Ein Hyperlink ist ein klickbarer Link, der den Benutzer zu einer anderen URL führt, während ein normaler Textlink lediglich die URL anzeigt, ohne dass eine Aktion ausgeführt wird.

3. Wie kann ich verhindern, dass ein Hyperlink vor der Bearbeitung aufgerufen wird? Nutze die Subadresse des Hyperlinks, um den Aufruf zu steuern und die gesamte Logik im Worksheet_FollowHyperlink-Ereignis zu implementieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige