Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
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
VBA Hyperlink erzeugen
22.01.2020 00:19:23
MarC
Servus alle,
ich möchte gerne automatisch hyperlinks erzeugen und diese überprüfen. Das heißt wenn in der Spalte H8 bis Hxxx z.B. die Berichtsnummer 1234 steht soll mittels VBA überprüft werden ob in dem Ordner XXXX das Dokument vorhanden ist. Wenn ja soll in der Zelle daneben in I8, Link stehen und auf das Dokument verweisen. Wenn das Dokument nicht gefunden wird soll die Zelle leer bleiben? Könnte mir da bitte jemand helfen?
Gruß Marc

28
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Hyperlink erzeugen
22.01.2020 10:42:48
Beverly
Hi Marc,
z.B. so:
Sub LinksErstellen()
Dim lngZeile As Long
Dim strPfad As String
Dim lngLetzte As Long
strPfad = "E:\Z_Test\"  ' "" Then
If Dir(strPfad & Cells(lngZeile, 8) & ".xlsx")  "" Then
Cells(lngZeile, 9).Hyperlinks.Add Anchor:=Cells(lngZeile, 9), _
Address:=strPfad & Cells(lngZeile, 8).Value & ".xlsx", _
TextToDisplay:=Cells(lngZeile, 8).Value
End If
End If
Next lngZeile
End Sub


AW: VBA Hyperlink erzeugen
22.01.2020 10:49:28
MarC
Entschuldigung Karin das ich meinen ersten Beitrag geändert habe, aber das was ich geschrieben habe war leider falsch
Anzeige
AW: VBA Hyperlink erzeugen
22.01.2020 13:28:14
MarC
Danke für deine Hilfe Beverly. Es funktioniert wunderbar bei Files die auf meinem Rechner sind, aber wenn ich eine Datei am Netzlaufwerk befindet und ich den Ordner angebe steht da "die angegebene Datei konnte nicht geöffnet werden". Woran liegt das denn? Zugriffsrechte habe ich für das Laufwerk.
Andere Frage. Kann man auch nur den übergeordneten Ordner angeben und veranlassen das alle Ordner in dem Ordner durchsucht werden?
AW: VBA Hyperlink erzeugen
22.01.2020 14:57:24
Beverly
Wenn du auch Unterordner durchsuche willst - befinden sich alle Dateien in unterschiedlichen Unterordnern oder alle im selben (unbekannten) Unterordner?


Anzeige
AW: VBA Hyperlink erzeugen
22.01.2020 15:25:49
MarC
Die Dateien befinden sich alle in unterschiedlichen Unterordnern Beverly. Und es kommen immer wieder neue Unterordner hinzu. Problem ist das der Code bei Dateien die auf meinem Laufwerk abgelegt waren gefunden wurden, aber bei Dateien die auf Netzlaufwerken liegen hat es nicht funktioniert.
AW: VBA Hyperlink erzeugen
22.01.2020 17:10:44
Beverly
Zum Thema Netztlaufwerk kann ich dir leider nicht weiterhelfen - deshalb Thread offen.


AW: VBA Hyperlink erzeugen
22.01.2020 19:42:52
MarC
Okay trotzdem Danke. Kannst du mir bitte noch mit dem Unterordner Thema helfen?
AW: VBA Hyperlink erzeugen
23.01.2020 00:11:32
Beverly
Versuche es so:
Option Explicit
Dim blnVorhanden As Boolean
Dim strOrdner As String
Sub LinksErstellen()
Dim lngZeile As Long
Dim strPfad As String
Dim lngLetzte As Long
strPfad = "E:\Z_Test\"
lngLetzte = Columns(8).Find(What:="*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
For lngZeile = 8 To lngLetzte
If Cells(lngZeile, 8)  "" Then
If Dir(strPfad & Cells(lngZeile, 8) & ".xlsx") = "" Then
OrdnerAuswahl strPfad, Cells(lngZeile, 8) & ".xlsx"
Else
blnVorhanden = True
End If
If blnVorhanden = True Then
If strOrdner = "" Then
strOrdner = strPfad
Else
strOrdner = strOrdner & "\"
End If
Cells(lngZeile, 9).Hyperlinks.Add Anchor:=Cells(lngZeile, 9), _
Address:=strOrdner & Cells(lngZeile, 8).Value & ".xlsx", _
TextToDisplay:=Cells(lngZeile, 8).Value
End If
blnVorhanden = False
strOrdner = ""
End If
Next lngZeile
End Sub
Sub OrdnerAuswahl(varSuchordner, strDatei As String)
Dim fso As Object
Dim Ordner
Dim UnterOrdner
Dim intLetzte As Integer
Dim lngLetzte As Long
Dim lngZeile As Long
Dim lngStart As Long
Dim strTabelle As String
Dim strMappe As String
Dim wksTabelle As Worksheet
Set fso = CreateObject("Scripting.FileSystemObject")
Set Ordner = fso.getfolder(varSuchordner)
For Each UnterOrdner In Ordner.subfolders
' 1. Mappe des Unterordners auf die Variable schreiben
' Variable ist leer wenn im Unterordner keine Arbeitsmappe vorhanden
strMappe = Dir(UnterOrdner & "\" & strDatei)
If strMappe  "" Then
blnVorhanden = True
strOrdner = UnterOrdner
Exit Sub
End If
OrdnerAuswahl UnterOrdner, strDatei
Next
Set fso = Nothing
Set Ordner = Nothing
End Sub


Anzeige
AW: VBA Hyperlink erzeugen
23.01.2020 12:43:33
MarC
Hi Karin,
der Code läuft super. Leider habe ich unter Unterordner an alle Unterordner gedacht, also an alle Ebenen darunter. Und du wirst es so verstanden haben durchsuche den Ordner und die Unterordner der ersten Ebene. Keine Ahnung ob das geht das man alle Ebenen der Unterordner durchsuchen lassen kann. Wenn das nicht geht weil man für jede Ebene eine neue Schleife machen muss ist meine Frage ob man wenigstens noch 2 Ebenen tiefer suchen kann? Ich habe es mal versucht aber der Code ist glaube ich falsch da sich die Dateien dann nicht öffnen lassen:
Sub OrdnerAuswahl(varSuchordner, strDatei As String)
Dim fso As Object
Dim Ordner
Dim UnterOrdner
Dim unterordner2
Dim intLetzte As Integer
Dim lngLetzte As Long
Dim lngZeile As Long
Dim lngStart As Long
Dim strTabelle As String
Dim strMappe As String
Dim wksTabelle As Worksheet
Set fso = CreateObject("Scripting.FileSystemObject")
Set Ordner = fso.getfolder(varSuchordner)
For Each UnterOrdner In Ordner.subfolders
' 1. Mappe des Unterordners auf die Variable schreiben
' Variable ist leer wenn im Unterordner keine Arbeitsmappe vorhanden
strMappe = Dir(UnterOrdner & "\" & strDatei)
If strMappe  "" Then
blnVorhanden = True
strOrdner = UnterOrdner
ElseIf strMappe = "" Then
strMappe = Dir(UnterOrdner & "\" & unterordner2 & "\" & strDatei)
blnVorhanden = True
UnterOrdner = unterordner2
strOrdner = UnterOrdner
Exit Sub
End If
OrdnerAuswahl UnterOrdner, strDatei
Next
Set fso = Nothing
Set Ordner = Nothing
End Sub

Desweiteren wollte ich fragen ob man nur einen Dateitypen angeben kann (aktuell xlsx) oder mehrere da in manchen Files auch ein Makro drin ist. Das würde bedeuten xlsx und xlsm?
Anzeige
AW: VBA Hyperlink erzeugen
23.01.2020 14:51:56
Beverly
Also bei mir werden ALLE Ebenen an Unterordnern für den im Code angegebenen Ordner durchsucht.
Um alle xl-Dateien zu berücksichtigen musst du den Code wie folgt ergänzen/ändern:
Option Explicit
Dim blnVorhanden As Boolean
Dim strOrdner As String
Dim strEintrag As String
Sub LinksErstellen()
Dim lngZeile As Long
Dim strPfad As String
Dim lngLetzte As Long
strPfad = "E:\Z_Test\"
lngLetzte = Columns(8).Find(What:="*", SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
For lngZeile = 8 To lngLetzte
If Cells(lngZeile, 8)  "" Then
If Dir(strPfad & Cells(lngZeile, 8) & ".xl*") = "" Then
OrdnerAuswahl strPfad, Cells(lngZeile, 8) & ".xl*"
Else
blnVorhanden = True
End If
If blnVorhanden = True Then
If strOrdner = "" Then
strOrdner = strPfad
Else
strOrdner = strOrdner & "\"
End If
Cells(lngZeile, 9).Hyperlinks.Add Anchor:=Cells(lngZeile, 9), _
Address:=strOrdner & strEintrag, _
TextToDisplay:=Cells(lngZeile, 8).Value
End If
blnVorhanden = False
strOrdner = ""
strEintrag = ""
End If
Next lngZeile
End Sub
Sub OrdnerAuswahl(varSuchordner, strDatei As String)
Dim fso As Object
Dim Ordner
Dim UnterOrdner
Dim intLetzte As Integer
Dim lngLetzte As Long
Dim lngZeile As Long
Dim lngStart As Long
Dim strTabelle As String
Dim strMappe As String
Dim wksTabelle As Worksheet
Set fso = CreateObject("Scripting.FileSystemObject")
Set Ordner = fso.getfolder(varSuchordner)
For Each UnterOrdner In Ordner.subfolders
' 1. Mappe des Unterordners auf die Variable schreiben
' Variable ist leer wenn im Unterordner keine Arbeitsmappe vorhanden
strMappe = Dir(UnterOrdner & "\" & strDatei)
If strMappe  "" Then
blnVorhanden = True
strOrdner = UnterOrdner
strEintrag = strMappe
Exit Sub
End If
OrdnerAuswahl UnterOrdner, strDatei
Next
Set fso = Nothing
Set Ordner = Nothing
End Sub


Anzeige
AW: VBA Hyperlink erzeugen
23.01.2020 20:32:46
MarC
Danke Beverly. Ich erhalte jetzt immer die Meldung "Laufzeitfehler 53 - Datei nicht gefunden". Jetzt habe ich ein paar Dateien weiter nach vorne kopiert. Und manche von ihnen werden dann auch gefunden außer die die einen zulangen Dateinamen haben. Und auch nur wenn ich sie alle direkt in einen Ordner kopiere. Wenn ich mehrere durchsuchen lasse findet er nichts und es kommt die Meldung Laufzeitfehler 53. Kann es sein das der hyperlink zu lang wird also in kombination Dateipfad und Dateiname? Wenn ja kann man da irgendwas machen? Den pfad spliten und in Excel zusammensetzen?
AW: VBA Hyperlink erzeugen
23.01.2020 21:23:32
Beverly
Wie viele Ebenen von Ordnern gibt es denn bei dir? Ich habe es mit 5 Ebenen problemlos getestet.
Zur Länge des Dateinamen kann ich nichts sagen.


Anzeige
AW: VBA Hyperlink erzeugen
23.01.2020 21:45:01
MarC
Also so viele Ebenen sind es eigentlich nicht maximal 3, aber der Pfad den ich angebe ist so mega lang. Ich stelle die länge mal mit X nach.
strPfad =\\xxxx.xxxxxxx.xxx\xxxx\xxx\xxxx\xxxxxxxx\xxxxx\xxxxxx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xxxxxxxxxxxx\xxxxxxxxxxxxxxxxxxxx\xxxxxxxxxxxxxxxx\xxxxxxxxxxxxxxxxxx\
Danach kommen dann noch maximal 3 Ebenen (meistens sind es nur 2) plus den Dateinamen der mal länger mal kürzer ist.
Jetzt habe ich gesehen das ich den oberen langen Pfad auslagern kann als Hyperlinkbasis. Ich habe den Link da rein kopiert aber wie ich den nutzen kann weiß ich nicht. Vielleicht muss ich ja auch beim hinterlegen in der Zusammenfassung irgendwas beachten
Anzeige
AW: VBA Hyperlink erzeugen
23.01.2020 23:40:10
Beverly
Das verstehe ich jetzt nicht so richtig: was meinst du mit "den Link rein kopiert"? Wo und was rein kopiert?


AW: VBA Hyperlink erzeugen
24.01.2020 00:04:20
MarC
Ich habe im Internet gelesen das man den Link verkürzen kann in dem man ihn auslagert. Ich habe also den Teil des Links genommen der immer gleich ist und ihn hier unter Linkbasis rein kopiert:
Userbild
Wenn ich jetzt eine Zelle verlinke muss ich nicht mehr den ganzen Link angeben.
Beispiel:
das ist der ursprüngliche link C:\Users\Meister\Downloads\bericht.pdf
wenn ich jetzt den Teil C:\Users\Meister\ in Linkbasis kopiere muss ich die Zelle nur noch mit Downloads\bericht.pdf verlinken und die Datei kann aufgerufen werden.
Ich dachte halt das man die Funktion Linkbasis irgendwie nutzen kann oder das du die kennst =/
Anzeige
AW: VBA Hyperlink erzeugen
24.01.2020 00:23:48
MarC
Tut mir leid Beverly das ich dich so nerve, aber ich tu mich echt schwer dir den Fehler zu erklären. Ich versuche dir meine durchgeführten tests zu erklären.
1. Wenn ich den längsten Dateipfad hernehme und den handisch mit der Zelle A1 verlinke kann ich die Datei aufrufen.
2. Wenn ich die gleiche Datei mit deinem VBA Code suche und hier
strPfad = den Pfad angebe in dem sich die Datei befindet

Wird der Link erstellt und ich kann ihn auch aufrufen aber es öffnet sich dann nur der Ordner in dem sich die Datei befindet.
3. Wenn ich die gleiche Datei mit deinem VBA Code suche und nicht den ordner angebe in dem sich das File befindet sondern nur den ordner der übergeordnet ist. Erhalte ich beim ausführen deines Codes diese Meldung "Laufzeitfehler 53 - Datei nicht gefunden".
4. Wenn ich die Datei an eine andere Position kopiere also in einen ordner der viel weiter vorne liegt wird die Datei gefunden der link richtig erstellt und beim drauf klicken die datei geöffnet.
5. Wenn ich jetzt aber mehrere Dateien suche und alle in einen ordner kopiere deren Dateipfad nicht so lang ist erhalte ich wieder die Meldung Laufzeitfehler 53.
Das würde doch bedeuten das der Dateipfad zu lang ist oder der Speicher nicht ausreicht oder?
Wenn ich aber mit deinem VBA Code nach der gleichen Datei suche wird der link erstellt aber beim aufrufen nur der ordner geöffnet in dem sich das file befindet.
Anzeige
AW: VBA Hyperlink erzeugen
24.01.2020 00:44:41
MarC
Beim Laufzeitfehler 53 wird mir in VBA immer dieser Teil markiert:
Userbild
Kannst du damit was anfangen? Ansonsten muss ich dir meinen Laptop schicken LoL
AW: VBA Hyperlink erzeugen
24.01.2020 00:44:43
MarC
Beim Laufzeitfehler 53 wird mir in VBA immer dieser Teil markiert:
Userbild
Kannst du damit was anfangen? Ansonsten muss ich dir meinen Laptop schicken LoL
AW: VBA Hyperlink erzeugen
24.01.2020 08:17:22
Beverly
Hast du mal geprüft, was genau auf der Variablen UnterOrdner an dieser Stelle steht?


AW: VBA Hyperlink erzeugen
24.01.2020 09:18:45
MarC
Ja habe ich. Bei strMappe ="" bei UnterOrdner = der Dateipfad nur wird mir dieser im gelben Fenster nicht ganz angezeigt weil der so lang ist und unter strDatei der Dateiname
AW: VBA Hyperlink erzeugen
24.01.2020 10:07:27
Beverly
Dann füge doch einfach mal eine zusätzliche Codezeile ein mit einer MsgBox:
MsgBox UnterOrdner
Andere Frage: kommen die gesuchten Arbeitsmappen gleichzeitig in mehreren Ordnern vor oder sind sie nur einmalig vorhanden? Falls nur einmalig - weshalb versuchst du nicht, anstelle des langen Verzeichnis-Namens mal einen kurzen einzugeben, also nur den Namen von einem der übergeordneten Ordner (so wie in meinem Beispiel)? Die Suche dauert dann allerdings länger, aber einen Versuch sollte es doch Wert sein um herauszufinden, ob es an der Länge des vorgegebenen Verzeichnises liegt oder einfach daran, dass nicht in so tiefen Unterordnern gesucht werden kann.


AW: VBA Hyperlink erzeugen
24.01.2020 10:36:26
MarC
Also ich habe MsgBox Unterordner angegeben. Mir wird beim ausführen der ganze Pfad des ersten Ordners in dem gesuchten werden soll angezeigt. Aber in dem Ordner der mir angezeigt und wird und wo er aussteigt befindet sich die gesuchte Datei gar nicht.
Wenn ich jetzt den Ordnerpfad ändere und genau den Ordner angebe in dem sich die Datei befindet. Erhalte ich die Fehlermeldung 76 - Pfad nicht gefunden.
Die gesuchten Arbeitsmappen kommen meines wissens wirklich nur einmal vor aber bei so vielen Ordner kann ich es nicht 100% sagen. Aktuell suche ich nur nach zwei Dateien (nur zum testen) die es wirklich nur 1 mal gibt.
Übergeordnete Ordner habe ich auch schon getestet, dann erhalte ich ja immer die Meldung Laufzeitfehler 53 wenn ich in den Tieferen Ordnern suche kommt die Meldung 76.
Ich habe es gesten rauf und runter versucht. Das komische ist, wenn ich deinen aller ersten Code verwende funktioniert es bei einer einzigen Datei bei der ich den Ordnerpfad direkt angebe blitz schnell und perfekt. Wenn ich aber den anderen Code hernehme mit den UnterOrdner dann nicht mehr
Sub LinksErstellen2()
Dim lngZeile As Long
Dim strPfad As String
Dim lngLetzte As Long
strPfad = "\\xxxxxxxxxxxxxxxxx\xxx\xxx\xx etc.\"  ' "" Then
If Dir(strPfad & Cells(lngZeile, 8) & ".pdf")  "" Then
Cells(lngZeile, 9).Hyperlinks.Add Anchor:=Cells(lngZeile,  _
9), _
Address:=strPfad & Cells(lngZeile, 8).Value & ".pdf",  _
_
TextToDisplay:=Cells(lngZeile, 8).Value
End If
End If
Next lngZeile
End Sub

AW: VBA Hyperlink erzeugen
24.01.2020 10:43:22
MarC
Hallo Beverly,
ich habe jetzt mit dem Code ohne der Funktion UnterOrdner zu durchsuchen 20 Dateien auf einmal suchen lassen. Es wurden alle gefunden und alle Pfade waren richtig. Es liegt dann nicht an der länger sondern irgendwie an dem Zusatz "UnterOrdner"
Sub LinksErstellen2()
Dim lngZeile As Long
Dim strPfad As String
Dim lngLetzte As Long
strPfad = "\\xxxxxxxxxxxxxxxxx\xxx\xxx\xx etc.\"  ' "" Then
If Dir(strPfad & Cells(lngZeile, 8) & ".pdf")  "" Then
Cells(lngZeile, 9).Hyperlinks.Add Anchor:=Cells(lngZeile,  _
_
9), _
Address:=strPfad & Cells(lngZeile, 8).Value & ".pdf",  _
_
_
TextToDisplay:=Cells(lngZeile, 8).Value
End If
End If
Next lngZeile
End Sub

AW: VBA Hyperlink erzeugen
24.01.2020 12:14:45
Beverly
Ich kann dazu nichts weiter sagen als was ich bereits gesagt habe: bei mir funktioniert der Code auch mit der Variablen UnterOrdner und mehreren Ebenen. Möglicherweise liegt das Problem darin, dass du auf einem Netzlaufwerk suchst - das kann ich allerdings nicht prüfen da ich keins habe.
Thema als offen gekennzeichnet.


Danke Beverly
26.01.2020 17:48:38
MarC
Schade das es nicht funktioniert, aber trotzdem vielen Dank für deine Hilfe =)
AW: VBA Hyperlink erzeugen
24.01.2020 10:11:45
MarC
Hallo Beverly,
ich habe gestern Nacht im Internet einen ähnlichen Beitrag gefunden und den dortigen Code etwas verändert. Dieser funktioniert, aber das Excel File steigt wegen der Auslastung kurz aus "keine Rückmeldung". Nach so 20 - 30 Sekunden kann ich dann wieder arbeiten und alle Files die vorhanden sind wurden gefunden und verlinkt.
Es ist zwar nicht schlecht das ich was gefunden habe, aber ich verstehe den Code nur zum Teil und mir wäre dein Lösungsweg lieber, weil ich denke das dein Code schneller ist und die Excel Datei dabei nicht aussteigt.
Vielleicht kann man aber auch den Code den ich gefunden habe beschleunigen oder du weißt warum bei deinem Code die Meldung "Laufzeitfehler 53" kommt. Wenn ich irgendwie helfen könnte =(
Option Explicit
Declare Function SearchTreeForFile Lib "imagehlp.dll" ( _
ByVal RootPath As String, _
ByVal InputPathName As String, _
ByVal OutputPathBuffer As String) As Long
Sub Test()
Dim Retval As Long, TmpStr As String * 256
Dim lngzeile As Long
Dim lngletzte As Long
lngletzte = Columns(8).Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious). _
Row
For lngzeile = 8 To lngletzte
If Cells(lngzeile, 8)  "" Then
Retval = SearchTreeForFile("\\xxxxxxxxxxxxx\xxxx\xxxxxxxxxxxxxx\xxxxxxxxxx\ _
xxxxxxxxxxxxx\xxxxxxxxxxxxxxxxxxxxxxxx\", Cells(lngzeile, 8) & ".pdf", TmpStr)
If Retval = 0 Then
Cells(lngzeile, 9).Value = "nicht gefunden/vorhanden"
Else
Cells(lngzeile, 9).Hyperlinks.Add Anchor:=Cells(lngzeile, 9), Address:=TmpStr,  _
TextToDisplay:=Cells(lngzeile, 8).Value
End If
End If
Next lngzeile
End Sub

AW: VBA Hyperlink erzeugen
22.01.2020 21:22:14
MarC
Oh Beverly, ich glaube ich habe den Fehler gefunden. Es Lag wohl am Dateiname "Instandhaltung202 #13 & #10 - 2019.04.29. Kann es sein das excel mit dem hashtag ein Problem hat? Ich habe nämlich den hashtag gelöscht und jetzt funktioniert es.
AW: Beispiel File
22.01.2020 10:45:49
MarC
Sorry Leute,
das war eine ungünstige Beschreibung und ohne Beispiel File. Ich versuch es nochmal. Also ab der Spalte C8 stehen Nummern von Berichten. Die Nummer entspricht auf dem Dateinamen. Wenn ich jetzt auf den Button klicke soll nach diesen Dateien im Ordner Instandhaltung gesucht werden. Wenn die Datei gefunden wird soll der Dateiname z.B. der aus C8 mit dem File verlinkt werden. Der Ordner Instandhaltung hat auch noch unter Ordner die ebenfalls durchsucht werden sollen.
Aktuell scheitere ich schon an der Suchfunktion. Liegt das vll daran das es ein Netzlaufwerk ist? Wäre super wenn mir hier jemand weiter helfen kann sonst muss ich alle xxx Datei per Hand verlinken =D
Userbild
https://www.herber.de/bbs/user/134612.xlsm

18 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige