Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1776to1780
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

Alter Hyperlink soll korrigiert werden

Alter Hyperlink soll korrigiert werden
18.08.2020 11:30:52
Thomas
Hallo
Folgende Situation:
Anklicken eines Hyperlink auf andere Datei bringt die Fehlermeldung:
"Die angegebene Datei kann nicht geöffnet werden.",
weil diese Datei in einen anderen Ordner verschoben wurde. Ich weiss auch, wohin, wenn die Adresse einen bestimmten Ordner beinhaltet. Das soll nun automatisch korrigiert werden. Wenn die Adresse
"Berichte\Datei.docx" ist, dann soll sie zu "Archiv\Berichte\Datei.docx" geändert werden. Links zu anderen Ordner sollen unverändert bleiben.
Gibt es dafür einen Event-Makroaufruf? Wie sieht der aus und wie kommt man dann im Makro an den eben aufgerufenen Hyperlink?
Das Makro soll dann die Linkadresse ändern, wenn diese einen bestimmten Inhalt hat. Aber das schaffe ich selbst, denke ich.
Thomas

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

Betreff
Datum
Anwender
Anzeige
AW: Alter Hyperlink soll korrigiert werden
18.08.2020 11:37:42
Daniel
Mein Lösungsansatz wäre, ein Makro für Search and Replace beim Öffnen der Arbeitsmappe zu starten

Option Explicit
Private Sub Workbook_Open()
... Dein Code
End Sub


Cells.Replace What:="SUCHBEGRIFF", Replacement:="ERSATZBEGRIFF", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

AW: Alter Hyperlink soll korrigiert werden
18.08.2020 11:44:07
Daniel
Gerade noch getestet

Sub Test()
Dim alterPfad As String
Dim neuerPfad As String
Dim myLink As Hyperlink
‚ Achtung: Groß/Kleinschrift beachten, ist für das Ersetzen wichtig
alterPfad = „\\datenalt\Test1“
neuerPfad = „\\datenneu“
‚ durch alle Hyperlinks im Blatt laufen, Blattname muss angepasst werden
For Each myLink In Sheets(„Tabelle1“).Hyperlinks
‚ und in der Adresse des Links den Teil alt gegen neu tauschen
myLink.Address = Replace(myLink.Address, alterPfad, neuerPfad)
Next
End Sub

Anzeige
AW: Alter Hyperlink soll korrigiert werden
18.08.2020 16:22:55
Thomas
Hi Daniel,
gute Idee, "Workbook_Open()", aber ich möchte den Makroaufruf erst bei Anklicken des Hyperlinks, bzw. wenn Excel den nicht öffnen kann. Denn der link soll erst bei Aufruf überprüft und korrigiert werden.
Vielleicht gibt es dau noch Ideen.
Thomas
AW: Alter Hyperlink soll korrigiert werden
18.08.2020 21:49:41
Mullit
Hallo,
das ist so'n bißchen heikel, da ist Daniels Vorschlag schon zielführend, weil man nach der Aktion prüfen muß, ggf. nur mit Api und Office-Fenster-üperprüfung der Warnmeldung, aber Du kannst das mal versuchen, ging im Test eigentl. zuverlässig...
' ********************************************************************** 
' Modul: Tabelle1 Typ: Klassenmodul des Tabellenblattes 
' ********************************************************************** 

Option Explicit

Private mobjHyperlink As Hyperlink
Private mobjTarget As Range
Private mblnRightClick As Boolean

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Hyperlinks.Count > 0 Then
   Set mobjTarget = Target
   mblnRightClick = True
End If
End Sub

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Set mobjHyperlink = Target
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set mobjTarget = Target
Call Application.OnTime(EarliestTime:=Now, Procedure:="Check_Hyperlink")
End Sub

Friend Property Get Hyperlink() As Hyperlink
Set Hyperlink = mobjHyperlink
End Property

Friend Property Set Hyperlink(ByRef probjHyperlink As Hyperlink)
Set mobjHyperlink = probjHyperlink
End Property

Friend Property Get Target() As Range
Set Target = mobjTarget
End Property

Friend Property Get RightClick() As Boolean
Let RightClick = mblnRightClick
End Property

Friend Property Let RightClick(ByVal pvblnRightClick As Boolean)
Let mblnRightClick = pvblnRightClick
End Property

' ********************************************************************** 
' Modul: Modul1  Typ: Standardmodul 
' ********************************************************************** 

Option Explicit
Option Private Module

Public Sub Check_Hyperlink()
Const TIMER_STEP As Single = 2! '// ggf. anpassen... 
Const OLD_PATH As String = "Berichte\Datei.docx"
Const NEW_PATH As String = "Archiv\Berichte\Datei.docx"
Dim sngTimer As Single
With Tabelle1
    If .Target.Hyperlinks.Count > 0 Then
      sngTimer = Timer
      Do Until Timer - sngTimer > TIMER_STEP Or Not .Hyperlink Is Nothing Or .RightClick
         DoEvents
      Loop
      If .Hyperlink Is Nothing And Not .RightClick Then
          Call MsgBox(Prompt:="File not found, path will be adjusted...", _
              Buttons:=vbExclamation, Title:="Pathfinder")
          With .Target.Hyperlinks(1)
              .Address = Replace$(Expression:=.Address, Find:=OLD_PATH, Replace:=NEW_PATH)
          End With
           '///// Call .Target.Hyperlinks(1).Follow(NewWindow:=True) '///// bei Bedarf nach Korr. gleich öffnen... 
      ElseIf .RightClick Then
          .RightClick = False
      Else
          '// "file exits" 
          Set .Hyperlink = Nothing
      End If
      Call .Target.Offset(0, -1).Select '// ggf. anpassen... 
    End If
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

Gruß, Mullit
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige