PDA

Vollständige Version anzeigen : Hyperlinks zu Dateien in Unterordnern generieren


Huanwey
25.03.2009, 14:46
Hallo,

ich habe leider über die Suchfunktion hierzu nichts passendes gefunden. Denke meine Aufgabe wird sich nur per VBA lösen lassen.

Also, folgendes Problem:

- in Spalte A stehen Bezeichnungen (zB A0001, B0003). Eine Datei mit dieser Kombination Buchstabe & Nummer ist im gewählten Ordner (bzw. Unterordner) zu finden und einzigartig. Der Dateiname enthält in jedem Fall die besagte Kombination, kann aber noch zusätzliche Infos angehängt haben und ist in den meisten Fällen eine .xls oder .pdf.

- diese Dateien stecken in Unterordnern, die in 100er Gruppen angelegt wurden (07601-07700, 07701-07800 usw.)

Die Aufgabe des Programms ist es, einen Hyperlink in Spalte B zu schreiben, der genau auf die Datei weist, deren Nummer in Spalte A steht.

Hoffe es ist klar wie ich das meine ;-)
Vllt kann man es ja als Kombination zweier Programme lösen:
Das erste sucht anhand der Buchstaben-Nummer-Kombination den genauen Dateinamen inkl. Pfad,
das zweite speichert daraus einen Hyperlink der als Bezeichnung die Nummer aus Spalte A hat.


Danke schonmal für die Hilfe.

Gruß
Huanwey

jinx
25.03.2009, 15:34
Moin, Huanwey,

sieh Dir zum Einen bitte Dateien in einem Verzeichnis und Unterverzeichnissen suchen (http://www.herber.de/mailing/111400h.htm) und zum Anderen Dateien mit Angabe des Dateidatums mit Hyperlink listen (http://www.herber.de/mailing/202103h.htm) an - aus diesen beiden Ansätzen sollte sich die Lösung zusammenfügen lassen...

Huanwey
25.03.2009, 16:18
Ich habs mir jetzt mal genauer angesehen. Das Problem ist, dass ich mich mit der Syntax leider kaum auskenne. Ich kann zwar erkennen was wo geschieht etc. aber eigene Schleifen dann schreiben fällt mir dann doch sehr schwer :(

Wie schreibe ich denn das Datei-Such-Script so um, dass es in der Spalte Zeilenweise den Wert nimmt, die entsprechende Datei sucht und den Pfad dann in die Zelle nebendran schreibt?

Das soll Zeilenweise solange geschehen, bis die erste leere Zelle kommt. Und falls er eine Datei nicht findet, soll die Pfadangabe natürlich leer sein und das Programm einfach mit der nächste Zeile weitermachen.

Huanwey
25.03.2009, 16:27
Wenn ich das richtig erkannt habe is der Sub ScanDir() schon nahe dran. Da müsste ich nur ne Schleife hinkriegen, die es zeilenweise abklappert, oder?

Gibt es die Möglichkeit beim Hyperlink nicht den Kompletten Pfad als Namen sondern bloß die Nummer die zuvor in der Zelle stand reinzuschreiben?

jinx
25.03.2009, 16:32
Moin, Huanwey,

für einen Hyperlink ab Excel 2000 gibt es die Möglichkeit, einen "freundlichen" Text anzuzeigen, während der Link den kompletten Pfad und Namen enthalten muss. Aber ich muss Dich vertrösten - bei mir dauert das noch ein "Weilchen", bis ich mich damit auseinandersetzen kann - vielleicht hilft zwischenzeitlich ein anderer User...

jinx
25.03.2009, 18:17
Moin, Huanwey,

hier im Beispiel stehen die Werte, die genau gefunden werden, in den Zellen ab A9:

Sub SearchFile_mod()
Dim lngCounter As Long
Dim lngAnzahl As Long
Const clngSTART_ROW As Long = 9

For lngAnzahl = clngSTART_ROW To Range("A" & clngSTART_ROW).End(xlDown).Row
With Application.FileSearch
.FileName = Cells(lngAnzahl, 1).Value
.LookIn = Range("B2").Value ' Startverzeichnis, z.B. C:\Temp
.SearchSubFolders = True
.Execute

If .FoundFiles.Count = 0 Then
Beep
MsgBox "Datei wurde nicht gefunden!"
Else
For lngCounter = 1 To .FoundFiles.Count
Cells(lngAnzahl, lngCounter + 1).Hyperlinks.Add Anchor:=Selection, _
Address:=.FoundFiles(lngCounter), _
TextToDisplay:=Cells(lngAnzahl, 1).Value
Next lngCounter
End If
End With
Next lngAnzahl

End Sub
Wenn noch andere Zusätze in den Dateinamen vorhanden sind, kann die MatchTextExactly-Eigenschaft mit False angegeben werden (z.B. vor dem Execute-Befehl), um nicht nur genaue Fundstellen zu erhalten.

Huanwey
26.03.2009, 16:13
Hi,

danke erstmal. Das kommt meinem Problem schon sehr nahe. Allerdings schreibt das Programm den Hyperlink jetzt immer in dieselbe Zelle, überschreibt den vorigen. Zudem wird immer in die Zelle geschrieben, die mit der Maus ausgewählt wurde.

Ich kann an der Syntax leider nicht erkennen wo ich den Zähler einbauen muss, damit es beim Schreiben des Hyperlinks immer eine Zeile nach unten springt. Das tut es beim auslesen des Suchwertes ja schon.

Zudem sollte, falls eine Datei nicht gefunden werden kann, keine Messagebox sondern einfach nichts in die Zeile hintendran geschrieben werden.

Ich stöber jetzt noch ein bisschen, vllt versteh ich das ja irgendwann. :confused:

Gruß

jinx
26.03.2009, 16:38
Moin, Huanwey,

der Fehler liegt in der Zuweisung von Anchor - hier darf nicht Selection (aktive Zelle) stehen, sondern es muss die Adresse der Zelle für den Hyperlink angegeben werden:

If .FoundFiles.Count > 0 Then
For lngCounter = 1 To .FoundFiles.Count
Cells(lngAnzahl, lngCounter + 1).Hyperlinks.Add _
Anchor:=Cells(lngAnzahl, lngCounter + 1), _
Address:=.FoundFiles(lngCounter), _
TextToDisplay:=Cells(lngAnzahl, 1).Value
Next lngCounter
End If

Huanwey
01.04.2009, 10:36
Hallo jinx,

besten Dank für die Hilfe. Jetzt hab ich genau das, was ich brauche. Genial ist auch, dass ich alle Dateien die gefunden werden verlinkt bekomme.

Gruß