Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1332to1336
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

Dateien suchen und Hyperlinks erstellen lassen

Dateien suchen und Hyperlinks erstellen lassen
01.10.2013 11:21:51
Bob
Hallo,
ich habe ein Tabellenblatt, welches in einer Spalte eine Vielzahl von 9-stelligen Teilenummern hat. In den nächsten Spalten sollen Hyperlinks auf entsprechende Datenblätter und weiteren Dokumenten eingefügt werde. Ist es mit einem vba-Script möglich anhand der Teilenummer in bestimmten Ordner nach dem passenden Dokument zu suchen und dies als Hyperlink in einer benachbarten Zelle zur Verfügung zu stellen? Das passende Dokument enthält im Dateinamen die Teilenummer wie z.B. 112233445.pdf oder 223344556_x.pdf? Der Dateiname kann also u.U. weitere Buchstaben vor oder nach der Teilenummer enthalten.
Gruß
Bob

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien suchen und Hyperlinks erstellen lassen
01.10.2013 15:13:45
Steffen

Sub Teile()
'ausgehend, dass die Teilenummern in Spalte A stehen und die Verlinkung in Spalte B
lRow = Cells(Rows.Count, 1).End(xlUp).Row
For a = 1 To lRow
Dateiname = CStr(Left(Cells(a, 1), 9)) & ".pdf" 'erstellt den Dateinamen mit Teilenummer
ActiveSheet.Hyperlinks.Add Anchor:=Cells(a, 2), Address:= _
"\\C:\Testordner\" & Dateiname _ 'Ablagestruktur anpassen
, TextToDisplay:=Dateiname
Next a
End Sub
Gruß Steffen

AW: Dateien suchen und Hyperlinks erstellen lassen
02.10.2013 11:17:10
Bob
Hallo Steffen,
vielen Dank dafür. Ein Fehler tritt beim Kompilieren auf und zwar beim ", TextToDsiplay:=Dateiname"
Gruß
Bob

Anzeige
AW: Dateien suchen und Hyperlinks erstellen lassen
06.10.2013 11:42:16
Christian
Hallo Hans,
da du leider meine emails ignorierst, hier per Forum:
Bitte meine Datei
https://www.herber.de/bbs/user/87393.xls
löschen!
Vielen Dank,

AW: Dateien suchen und Hyperlinks erstellen lassen
01.10.2013 15:27:20
fcs
Hallo Bob,
hier ein Makro mit entsprechende Fähigkeiten, dass du an deine Anforderungen anpassen musst.
mfg
Franz
'Code in einem allgemeinen Modul
'Erstellt unter Windows Viste, Excel 2010
Option Explicit
Private fsObj As Object, fsFolder As Object
Private wks As Worksheet, lngZeile As Long
Sub HyperlinksEinfuegen()
Dim strOrdner As String
Dim intSpalte As Integer
Dim strTeileNummer As String
On Error GoTo Fehler
Set wks = ActiveSheet
'Startordner für Dateisuche - gf. per Dialog auswählen
strOrdner = "C:\Users\Public\Abteilung D"
'Beispiel für Ordnerstruktur
'C:\Users\Public\Abteilung D
'C:\Users\Public\Abteilung D\Manual
'C:\Users\Public\Abteilung D\Zeichung
'    GoTo Weiter01 '
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Ordner mit Dokumenten zu Teile-Nummern auswahlen"
.InitialFileName = strOrdner & Application.PathSeparator
If .Show = -1 Then
strOrdner = .SelectedItems(1)
Else
GoTo Fehler
End If
End With
Weiter01:
Set fsObj = VBA.CreateObject("Scripting.FileSystemObject")
Set fsFolder = fsObj.getfolder(strOrdner)
With wks
'Zeilen in SPalte mit Teilenummern abarbeiten - Hier Spalte A
For lngZeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
strTeileNummer = .Cells(lngZeile, 1).Text
'Suchmuster für Dateiname ? = 1 beliebiges Zeichen, # = 1 beliebige Ziffer, _
* = beliebige Zeichenkette
Call prcMakeHyperlink(strSubfolder:="", _
strFileLike:="*" & strTeileNummer & "*.pdf", lngSpalte:=2)
Call prcMakeHyperlink(strSubfolder:="Zeichnung", _
strFileLike:="*" & strTeileNummer & "*.dwg", lngSpalte:=3)
Call prcMakeHyperlink(strSubfolder:="Manual", _
strFileLike:="*" & strTeileNummer & "*.pdf", lngSpalte:=4)
Next
End With
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case 76
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf _
& "Pfad: " & strOrdner, , "Makro: HyperlinksEinfuegen"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, , "Makro: HyperlinksEinfuegen"
End Select
End With
'Objektvariablen zurücksetzen
Set wks = Nothing: Set fsObj = Nothing: Set fsFolder = Nothing
End Sub
Sub prcMakeHyperlink(strSubfolder As String, strFileLike As String, lngSpalte, _
Optional strNoFile As String = "No File")
'strSubfolder = Unterordner in dem gesucht werden soll
'strFileLike  = Vergleichsfilter für Like-Operator
'lngSpalte    = Spalte in der Hyperlink eingefügt werden soll
'strNoFile    = Optionaler Text wenn keine Datei gefunden wurde  = "No File"
Dim fsFile As Variant, fsSubFolder As Object
Dim strDatei As String
If strSubfolder = "" Then
'Suche im Hauptordner
Set fsSubFolder = fsFolder
Else
'Suche in Unterordner
Set fsSubFolder = fsObj.getfolder(fsFolder.Name & Application.PathSeparator &  _
strSubfolder)
End If
'Dateinamen im Ordner mit Suchmuster vergleichen und Hyperlink in Spalte einfügen
strDatei = ""
With wks
.Cells(lngZeile, lngSpalte).ClearContents
For Each fsFile In fsSubFolder.Files
If fsFile.Name Like strFileLike Then
strDatei = fsFile.Path
.Hyperlinks.Add Anchor:=.Cells(lngZeile, lngSpalte), Address:=strDatei, _
TextToDisplay:=fsFile.Name
Exit For
End If
Next fsFile
If strDatei = "" Then
.Cells(lngZeile, lngSpalte).Value = strNoFile
End If
End With
Set fsSubFolder = Nothing
Set fsFile = Nothing
End Sub

Anzeige
AW: Dateien suchen und Hyperlinks erstellen lassen
02.10.2013 12:00:22
Bob
Hallo Franz,
bei mir kommt es immer zum Fehler 76 "Pfad nicht gefunden", obwohl ich den Pfad entsprechend angepasst habe. Erwähnenswert ist, dass ein Dokument bzw. Hyperlink gefunden und eingetragen wird.
Was wahrscheinlich noch fehlt, ist, dass ich mehrere Hyperlinks pro Teilenummer benötige. Pro Teilenummer müssen drei Dokumente verlinkt werden, die in unterschiedlichen Ordnern liegen.
Gruß
Bob

AW: Dateien suchen und Hyperlinks erstellen lassen
03.10.2013 08:24:13
fcs
Hallo Bob,
ich habe jetzt noch ein paar Prüfungen für die Verzeihnisse eingebaut und an verschiedenen Stellen den Parameter "Path" statt "Name".
Wahrscheinlich war das in meiner Test-Umgebung egal - aber bei anderen Verzeichnissen möglicherweise nicht.
Im Ordner-Auswahldialog wählst du den übergeordneten Ordner aus, der alle Unterordner mit den Dokumenten enthält.
Die Unterordner, den Dateifilter und die Spalte in der die Hyperlinks angelegt werden sollen gibst du in diesen Zeilen an.
        'Suche von pfd-Dokument im Hauptordner - Hyperlink in Spalte B
If fncMakeHyperlink(strSubfolder:="", _
strFileLike:="*" & strTeileNr & "*.pdf", _
lngSpalte:=2) = False Then GoTo Fehler
'Suche von dwg-Dokument im Unterordner Zeichnung - Hyperlink in Spalte C
If fncMakeHyperlink(strSubfolder:="Zeichnung", _
strFileLike:="*" & strTeileNr & "*.dwg", _
lngSpalte:=3) = False Then GoTo Fehler
'Suche von pdf-Dokument im Unterordner Manual - Hyperlink in Spalte D
If fncMakeHyperlink(strSubfolder:="Manual", _
strFileLike:="*" & strTeileNr & "*.pdf", _
lngSpalte:=4) = False Then GoTo Fehler
Gruß
Franz
'Code in einem allgemeinen Modul
'Erstellt unter Windows Viste, Excel 2010
Option Explicit
Private fsObj As Object, fsFolder As Object
Private wks As Worksheet, lngZeile As Long
Sub HyperlinksEinfuegen()
Dim strOrdner As String
Dim intSpalte As Integer
Dim strTeileNr As String
On Error GoTo Fehler
Set wks = ActiveSheet
'Startordner für Dateisuche - ggf. per Dialog auswählen
strOrdner = "C:\Users\Public\Abteilung D"
'Beispiel für Ordnerstruktur
'C:\Users\Public\Abteilung D
'C:\Users\Public\Abteilung D\Manual
'C:\Users\Public\Abteilung D\Zeichung
'    GoTo Weiter01 '
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Haupt-Ordner mit Unterordnern und Dokumenten zu " _
& "Teile-Nummern auswahlen"
.InitialFileName = strOrdner & Application.PathSeparator
If .Show = -1 Then
strOrdner = .SelectedItems(1)
Else
GoTo Fehler
End If
End With
Weiter01:
If Dir(strOrdner, vbDirectory) = "" Then
MsgBox "Ordner" & vbLf & strOrdner & vbLf & "existiert nicht!", _
vbInformation + vbOKCancel, "Hyperlinks anlegen"
GoTo Fehler
End If
Set fsObj = VBA.CreateObject("Scripting.FileSystemObject")
Set fsFolder = fsObj.getfolder(strOrdner)
With wks
'Zeilen in SPalte mit Teilenummern abarbeiten - Hier Spalte A
For lngZeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
strTeileNr = .Cells(lngZeile, 1).Text
'Suchmuster für Dateiname ? = 1 beliebiges Zeichen, # = 1 beliebige Ziffer, _
* = beliebige Zeichenkette
'Suche von pfd-Dokument im Hauptordner - Hyperlink in Spalte B
If fncMakeHyperlink(strSubfolder:="", _
strFileLike:="*" & strTeileNr & "*.pdf", _
lngSpalte:=2) = False Then GoTo Fehler
'Suche von dwg-Dokument im Unterordner Zeichnung - Hyperlink in Spalte C
If fncMakeHyperlink(strSubfolder:="Zeichnung", _
strFileLike:="*" & strTeileNr & "*.dwg", _
lngSpalte:=3) = False Then GoTo Fehler
'Suche von pdf-Dokument im Unterordner Manual - Hyperlink in Spalte D
If fncMakeHyperlink(strSubfolder:="Manual", _
strFileLike:="*" & strTeileNr & "*.pdf", _
lngSpalte:=4) = False Then GoTo Fehler
Next
End With
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case 76
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf _
& "Pfad: " & strOrdner, , "Makro: HyperlinksEinfuegen"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, , "Makro: HyperlinksEinfuegen"
End Select
End With
'Objektvariablen zurücksetzen
Set wks = Nothing: Set fsObj = Nothing: Set fsFolder = Nothing
End Sub
Function fncMakeHyperlink(strSubfolder As String, strFileLike As String, lngSpalte, _
Optional strNoFile As String = "No File") As Boolean
'strSubfolder = Unterordner in dem gesucht werden soll
'strFileLike  = Vergleichsfilter für Like-Operator
'lngSpalte    = Spalte in der Hyperlink eingefügt werden soll
'strNoFile    = Optionaler Text wenn keine Datei gefunden wurde  = "No File"
Dim fsFile As Variant, fsSubFolder As Object
Dim strDatei As String
fncMakeHyperlink = True
If strSubfolder = "" Then
'Suche im Hauptordner
Set fsSubFolder = fsFolder
Else
If Dir(fsFolder.Path & Application.PathSeparator & strSubfolder, _
vbDirectory) = "" Then
If MsgBox("Der Unter-Ordner" & vbLf _
& fsFolder.Path & Application.PathSeparator & strSubfolder & vbLf _
& "existiert nicht!", _
vbQuestion + vbOKCancel, "Hyperlinks anlegen") = vbCancel Then
fncMakeHyperlink = False
End If
Exit Function
End If
'Suche in Unterordner
Set fsSubFolder = fsObj.getfolder(fsFolder.Path & Application.PathSeparator & _
strSubfolder)
End If
'Dateinamen im Ordner mit Suchmuster vergleichen und Hyperlink in Spalte einfügen
strDatei = ""
With wks
.Cells(lngZeile, lngSpalte).ClearContents
For Each fsFile In fsSubFolder.Files
If fsFile.Name Like strFileLike Then
strDatei = fsFile.Path
.Hyperlinks.Add Anchor:=.Cells(lngZeile, lngSpalte), Address:=strDatei, _
TextToDisplay:=fsFile.Name
Exit For
End If
Next fsFile
If strDatei = "" Then
.Cells(lngZeile, lngSpalte).Value = strNoFile
End If
End With
Set fsSubFolder = Nothing
Set fsFile = Nothing
End Function

Anzeige
AW: Dateien suchen und Hyperlinks erstellen lassen
04.10.2013 07:32:49
Bob
Hallo Franz,
das sieht schon recht gut bei mir aus. Meine Ordnerstruktur ist folgende:
C:\Hauptordner\Datenblätter
C:\Hauptordner\Zeichnung\2012\
C:\Hauptordner\Zeichnung\2013\
Leider funktioniert es nicht, wenn ich in "strSubfolder:="Manual" den Ordner Manual mit Zeichnung\2012 ersetze. Gibt es einen anderen Weg?
Die Datenblätter-Links werden schon eingetragen, aber in Spalte C und nicht in B.
Gruß
Bob

AW: Dateien suchen und Hyperlinks erstellen lassen
04.10.2013 09:27:18
Bob
Hallo Franz,
haut doch hin. Habe wohl Slash und Backslash verwechselt...
Eine Frage schließt sich allerdings noch an: Nach Start des Makros wird die Teilenummer schnell
mit Hyperlinks gefüllt. Im Anschluss daran dauert es bestimmt. 2-3 Minuten bis alle weiteren Links
gefunden sind (In meinem Beispiel waren es nur 43 Teilenummern). Excel geht dann richtig "in die Knie"
Woran kann es liegen?
Gruß
Bob

Anzeige
AW: Dateien suchen und Hyperlinks erstellen lassen
04.10.2013 19:26:20
fcs
Hallo Bob,
wenn sehr viele Dateien in den Unterordnern sind, dann sind in dem Makro sehr viele Zugriffe auf das Dateiverwaltungssystem erforderlich. Da wird die Makroausführung schnell langsam.
Ich hab das Ganze jetzt umprogrammiert, so die Dateinamen und Pfad der Dateien in den Unterordnern jeweils in ein Datenarray eingelesen werden und die Hyperlinks spaltenweise und nicht mehr zeilenweise eingtragen werden. So sollte das Erzeugen der Hyperlinks wesentlich schneller erfolgen.
Gruß
Franz
'Code in einem allgemeinen Modul
'Erstellt unter Windows Viste, Excel 2010
Option Explicit
Private fsObj As Object, fsFolder As Object
Private wks As Worksheet, lngZeile As Long
Sub HyperlinksEinfuegen()
Dim strOrdner As String
On Error GoTo Fehler
Set wks = ActiveSheet
'Startordner für Dateisuche - ggf. per Dialog auswählen
strOrdner = "C:\Users\Public\Hauptordner"
'Beispiel für Ordnerstruktur
'C:\Users\Public\Hauptordner
'C:\Users\Public\Hauptordner\Datenblätter
'C:\Users\Public\Hauptordner\Zeichung\2012
'C:\Users\Public\Hauptordner\Zeichung\2013
'    GoTo Weiter01 '
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bitte Haupt-Ordner mit Unterordnern und Dokumenten zu " _
& "Teile-Nummern auswahlen"
.InitialFileName = strOrdner & Application.PathSeparator
If .Show = -1 Then
strOrdner = .SelectedItems(1)
Else
GoTo Fehler
End If
End With
Weiter01:
If Dir(strOrdner, vbDirectory) = "" Then
MsgBox "Ordner" & vbLf & strOrdner & vbLf & "existiert nicht!", _
vbInformation + vbOKCancel, "Hyperlinks anlegen"
GoTo Fehler
End If
Set fsObj = VBA.CreateObject("Scripting.FileSystemObject")
Set fsFolder = fsObj.getfolder(strOrdner)
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
'Suchmuster für Dateiname ? = 1 beliebiges Zeichen, # = 1 beliebige Ziffer, _
* = beliebige Zeichenkette
'Suche von pfd-Dokument im Hauptordner - Hyperlink in Spalte B
If fncMakeHyperlink(strSubfolder:="Datenblätter", _
strFileLike:="*.pdf", _
lngSpalte:=2) = False Then GoTo Fehler
'Suche von dwg-Dokument im Unterordner Zeichnung - Hyperlink in Spalte C
If fncMakeHyperlink(strSubfolder:="Zeichnung\2012", _
strFileLike:="*.pdf", _
lngSpalte:=3) = False Then GoTo Fehler
'Suche von pdf-Dokument im Unterordner Manual - Hyperlink in Spalte D
If fncMakeHyperlink(strSubfolder:="Zeichnung\2013", _
strFileLike:="*.pdf", _
lngSpalte:=4) = False Then GoTo Fehler
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case 76
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf _
& "Pfad: " & strOrdner, , "Makro: HyperlinksEinfuegen"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, , "Makro: HyperlinksEinfuegen"
End Select
End With
'Objektvariablen zurücksetzen
Set wks = Nothing: Set fsObj = Nothing: Set fsFolder = Nothing
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub
Function fncMakeHyperlink(strSubfolder As String, strFileLike As String, lngSpalte, _
Optional strNoFile As String = "No File") As Boolean
'strSubfolder = Unterordner in dem gesucht werden soll
'strFileLike  = Vergleichsfilter für Like-Operator
'lngSpalte    = Spalte in der Hyperlink eingefügt werden soll
'strNoFile    = Optionaler Text wenn keine Datei gefunden wurde  = "No File"
Dim fsFile As Variant, fsSubFolder As Object
Dim strDatei As String
Dim arrFilePath() As String, arrFileName() As String, intFile As Integer
Dim strTeileNr As String
Dim strLike As String
fncMakeHyperlink = True
If strSubfolder = "" Then
'Suche im Hauptordner
Set fsSubFolder = fsFolder
Else
If Dir(fsFolder.Path & Application.PathSeparator & strSubfolder, _
vbDirectory) = "" Then
If MsgBox("Der Unter-Ordner" & vbLf _
& fsFolder.Path & Application.PathSeparator & strSubfolder & vbLf _
& "existiert nicht!", _
vbQuestion + vbOKCancel, "Hyperlinks anlegen") = vbCancel Then
fncMakeHyperlink = False
End If
Exit Function
End If
'Suche in Unterordner
Set fsSubFolder = fsObj.getfolder(fsFolder.Path & Application.PathSeparator & _
strSubfolder)
End If
'Dateinamen und Name+Pfad in Arrayeinlesen
Erase arrFileName, arrFilePath
intFile = 0
For Each fsFile In fsSubFolder.Files
intFile = intFile + 1
ReDim Preserve arrFileName(1 To intFile)
ReDim Preserve arrFilePath(1 To intFile)
arrFileName(intFile) = fsFile.Name
arrFilePath(intFile) = fsFile.Path
Next
'Zeilen in SPalte mit Teilenummern abarbeiten - Hier Spalte A
With wks
For lngZeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
strTeileNr = .Cells(lngZeile, 1).Text
strLike = "*" & strTeileNr & strFileLike
'Dateinamen im Ordner mit Suchmuster vergleichen und Hyperlink in Spalte einfügen
strDatei = ""
With wks
.Cells(lngZeile, lngSpalte).ClearContents
For intFile = 1 To UBound(arrFileName)
If arrFileName(intFile) Like strLike Then
strDatei = arrFilePath(intFile)
.Hyperlinks.Add Anchor:=.Cells(lngZeile, lngSpalte), Address:=strDatei, _
TextToDisplay:=arrFileName(intFile)
Exit For
End If
Next intFile
If strDatei = "" Then
.Cells(lngZeile, lngSpalte).Value = strNoFile
End If
End With
Next
End With
Set fsSubFolder = Nothing
Set fsFile = Nothing
End Function

Anzeige
AW: Dateien suchen und Hyperlinks erstellen lassen
05.10.2013 20:38:47
Bob
Hallo Franz,
das sieht sehr gut aus! Vielen Dank dafür. Hat mir wirklich weitergeholfen.
Eine Frage hätte ich noch: Gibt es auch eine Möglichkeit, dass man einen Hyperlink als
Funktion einträgt, also nicht den Hyperlink, der z.B. mittels rechter Maustaste auswählbar ist.
Hatte ein Problem, dass ein Freund die Excel-Datei mit einer älteren Excel-Version (2003) geöffnet hat
und alle Hyperlinks danach defekt waren.
Gruß
Bob

AW: Dateien mit Like suchen und in Liste eintragen
06.10.2013 16:32:28
fcs
Hallo Bob,
die Hyperlinks funktionieren natürlich nur wenn bei dem Freund alle Dateien inklusive der Datei mit den Hyperlinks in der gleichen Ordnerstruktur gespeichert sind. Der Grund ist, dass die Hyperlink-Adressen relativ zu der Datei in der die Hyperlinks stehen gespeichert werden.
So funktioniert es z.B. nicht wen die Excel-Datei direkt aus der E-Mail geöffnet wird, da hier die Datei immer in einem temporären Verzeichnis gespeichert wird.
Man könnte es auch so machen, das in den Zellen der Dateiname der gefundenen Datei ohne Hyperlink eingetragen wird. Die Information zu den Ordnern und dem Dateityp wird in den ersten 3 Zeilen der Liste eingetragen. Per Doppelklick in die Zellen kann dann die Datei nach Bestätigung geöffnet werden. Auch dies setzt natürlich voraus, dass beim E-Mail-Empfänger die Datendateien in der gleichen Ordnerstruktur verfügbar sind.
Hier eine entsprechende Beispiel-Datei.
https://www.herber.de/bbs/user/87552.xlsm
mfg
Franz
Anzeige

63 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige