Hallo,
Für einen Neuling ist dein Code garnicht mal so schlecht. Er hat nur noch einige Tücken, die man als Anfänger nicht gleich auf den ersten Blick sieht:
For Each hyp In ActiveSheet - An dieser Stelle kommt dein Laufzeitfehler 438, weil ActiveSheet keine Auflistung sondern ein Einzelobjekt ist. Hier wird jedoch ein Collection-Objekt erwartet. Also eine Liste gleichartiger Objekte die über die Eigenschaft ihres Mutterobjekts zurückgegeben werden. Auflistungsobjekte erkennst du meistens daran, dass sie mit dem Buchstaben s enden. In deinem Fall also: For Each hyp In ActiveSheet.Hyperlinks
Zweitens prüfst du innerhalb deiner Schleife immer auf den ersten Hyperlink. If Hyperlinks(1).Address = Linkalt Then. Du willst aber alle Hyperlinks aktualisieren. also musst du Hyperlinks(1) durch hyp ersetzen: If hyp.Address = Linkalt Then
Drittens solltest du auch die Möglichkeit in Betracht ziehen, dass auch an anderer Stelle eine Eingabe erfolgen kann, die nichts mit Hyperlinks zu tun hat. In diesem Fall würdest du mit deinem Code einen Laufzeitfehler 9 erhalten. Da die entsprechende Zelle keinen Hyperlink besitzt. Hier musst du also noch eine If Abfrage einbauen, ob die geänderte Zelle überhaupt einen Hyperlink hat.
Fertig könnte der Code in etwa so aussehen. Hab jetzt nicht allzuviel geändert, damit du noch durchsiehst. Der Code gehört natürlich in das Tabellenmodul wo du die Hyperlinks hast. z.b. Tabelle1
Option Explicit
Public Linkalt As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Hyperlinks.Count = 1 Then
Linkalt = Hyperlinks(1).Address
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Linkneu As String
Dim hyp As Hyperlink
If Target.Hyperlinks.Count > 0 Then
Linkneu = Target.Hyperlinks(1).Address
For Each hyp In ActiveSheet.Hyperlinks
If hyp.Address = Linkalt Then
hyp.TextToDisplay = Target.Hyperlinks(1).TextToDisplay
hyp.Address = Replace(hyp.Address, Linkalt, Linkneu)
End If
Next
Linkalt = Linkneu
End If
End Sub
Einziger Nachteil: Damit der Code funktioniert muss zwingend auch der Anzeigetext geändert werden. Wird nur der Hyperlink an sich geändert, springt der Code leider nicht an. Hierzu fällt mir aber im Moment leider auch nichts besseres ein, da es leider kein Ereignis für Hyperlink_Change gibt. Insofern hoffe ich, dass dir das so ausreicht.
Gruß Mr. K.
|