Unterordner und Dateien auflisten

Hallo zusammen,

ich müsste in meiner Datenbank eine Ordnerstruktur über VBA einlesen.
Leider kann ich selber nicht viel in VBA und hab auch mit Google nicht wirklich etwas gefunden.

Also folgendes:
Ich habe in einem Ordner mehrere Unterordner und in diesen Ordnern ein bis mehrere Dateien.
Jetzt soll das Auslesen fogendermaßen funktionieren, dass die Unterordner in der ersten Spalte untereinander stehen, und die enthaltenen Dateien in der zweiten bis n-ten Spalte beim zugehörigen Ordner.

Bsp:
Unterordner1 Datei11 Datei12
Unterordner2 Datei21
Unterordner3 Datei31 Datei32 Datei33
Unterordner4 Datei41

In die weiteren Spalten wird dann händisch etwas dazugeschrieben.
Wenn in dem Verzeichnis oder den Unterordnern etwas geändert oder hinzugefügt wird soll die Tabelle aktualisiert, aber nichts gelöscht werden.

Hoffe es war irgendwie verständlich.

mfg MPunkt

Hallo,

ich müsste in meiner Datenbank eine Ordnerstruktur über VBA
einlesen.

welche Version hast du denn?

Leider kann ich selber nicht viel in VBA und hab auch mit
Google nicht wirklich etwas gefunden.

da reicht ja auch die Hilfe von Access vollkommen aus :smile:

Lese dir mal die Hilfe für DIR durch

In die weiteren Spalten wird dann händisch etwas
dazugeschrieben.

nun stelle dir mal vor, du hast 100 Dateien in einem Ordner.
D.h. du musst 100 Felder dafür in der Datenbank erstellen.
Und was ist, wenn es 101 Dateien werden? Willst du dann jedes Mal die Tabelle ändern?

Dein Datenbankkonzept ist nicht praktikabel!
Bedenke bitte auch: Datenbanken verwalten die Daten vertikal und nicht horizontal!
Wie du das später verwaltest, bzw. anzeigen lässt, ist eine andere Geschichte.

Wenn in dem Verzeichnis oder den Unterordnern etwas geändert
oder hinzugefügt wird soll die Tabelle aktualisiert, aber
nichts gelöscht werden.

das kann man programmieren :smile:

Hoffe es war irgendwie verständlich.

ja, auch wenn du mit deinem Konzept auf dem Holzweg bist :frowning:

Grüße aus Rostock
Wolfgang
(Netwolf)

Moin, MPunkt,

Wenn in dem Verzeichnis oder den Unterordnern etwas geändert
oder hinzugefügt wird soll die Tabelle aktualisiert, aber
nichts gelöscht werden.

Access kriegt von solchen Änderungen nichts mit, Du müsstest das also beim nächsten Aufruf der Funktion prüfen. Einfacher ist vermutlich, das Ganze gleich neu zu erstellen, wenn die Applikation geöffnet wird.

Gruß Ralf

Hallo,

ich müsste in meiner Datenbank eine Ordnerstruktur über VBA
einlesen.

welche Version hast du denn?

Access2007

Leider kann ich selber nicht viel in VBA und hab auch mit
Google nicht wirklich etwas gefunden.

da reicht ja auch die Hilfe von Access vollkommen aus :smile:

Lese dir mal die Hilfe für DIR durch

Danke hab ich gemacht, und eine Datei aus dem Verzeichnis bekomme ich schon in ne MsgBox :smile: … aber mehr geht halt noch nicht.
Wie zum Beispiel JEDEN Ordner auslesen und dann noch die Dateien zugehörig zu den Ordnern bekommen???

In die weiteren Spalten wird dann händisch etwas
dazugeschrieben.

nun stelle dir mal vor, du hast 100 Dateien in einem Ordner.

In den Ordnern sind maximal 5 Dateien in den meisten Fällen 1 bis 2.

D.h. du musst 100 Felder dafür in der Datenbank erstellen.
Und was ist, wenn es 101 Dateien werden? Willst du dann jedes
Mal die Tabelle ändern?

Dein Datenbankkonzept ist nicht praktikabel!
Bedenke bitte auch: Datenbanken verwalten die Daten vertikal
und nicht horizontal!

Das is mir schon klar.
Aber es geht eben um die Zugehörigkeit und dass ich dann pro Unterordner etwas dazuschreiben will.
Andere möglichkeit wäre noch für jeden Unterordner eine eigene Tabelle erstellen zu lassen … dann hab ich aber 200 Tabellen in denen jeweils nur 1 oder 2 Felder sind … ist das sinnvoller?
Lass mich auch gerne mit weiteren Vorschlägen belehren!

Wie du das später verwaltest, bzw. anzeigen lässt, ist eine
andere Geschichte.

Wenn in dem Verzeichnis oder den Unterordnern etwas geändert
oder hinzugefügt wird soll die Tabelle aktualisiert, aber
nichts gelöscht werden.

das kann man programmieren :smile:

Hoffe es war irgendwie verständlich.

ja, auch wenn du mit deinem Konzept auf dem Holzweg bist :frowning:

Wie gesagt, wie würdest du es machen?

Grüße aus Rostock
Wolfgang
(Netwolf)

Hallo,

ohne VBA nichts gewesen…

kopier folgenden Code in ein Modul und ruf make_Dirlist mit Übergabe des Start-Verzeichnisses auf. Anstelle dem Schreiben in eine Textdatei kannst Du ja die Pfadnamen in eine Tabelle speichern.

Von einer „horizontalen Auflistung“ der Dateien in einem Datensatz (für je ein Verzeichnis) solltest Du Abstand nehmen.

Dim fs As New Scripting.FileSystemObject
Dim fld As Folder
Dim subf As Folder
Dim liste, Filenames, file

Function make_dirlist(StartVerz As String)
Set fs = CreateObject(„Scripting.FileSystemObject“)
Set fld = fs.GetFolder(StartVerz)
Listordner fld
Set Filenames= fs.OpenTextFile(„C:\Files.txt“, 8, True, 0)
Filenames.WriteLine liste
Filenames.Close
MsgBox („fertig“)
End Function
Sub Listordner(pFld)
For Each file In pFld.Files
liste = liste & file.Path & vbCrLf
Next
For Each subf In pFld.SubFolders
liste = liste & subf.Path & vbCrLf
Listordner subf
Next
End Sub

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Zur Datenstruktur
Moin, MPunkt,

Unterordner1 Datei11 Datei12
Unterordner2 Datei21
Unterordner3 Datei31 Datei32 Datei33
Unterordner4 Datei41

zum Speichern ist diese Struktur völlig ungeeignet. Bau Dir zwei Tabellen auf:

**Ordner** (<u>OrdnerId</u>, Ordnername, FS\_OrdnerId, ...)

**Datei** (<u>Datei</u>, Dateiname, FS\_OrdnerId, ...)

In Ordner.FS_OrdnerId steht die ID des übergeordneten Ordners (wenn es denn einen gibt), in Datei.FS_OrdnerId die ID des Ordners, der die Datei enthält.

Dieses Gerüst befüllst Du erstmal, dann kannst Du es darstellen, wie immer Du magst. Die gewünschte Listenstruktur - Dateien nebeneinander - bekommst Du natürlich nicht per SQL, sondern nur per sequentieller Verarbeitung.

Frage am Rande: Wozu dient das Ganze? Im Windows Explorer gibt es doch das Feld „Kommentar“, um Dateien und Ordener zu beschreiben.

Gruß Ralf

Hallo,

also wenn ich diesen Code in ein Modul speicher und dann auf „Ausführen“ klicke, kommt bei mir ein Fenster und will dass ich ein Makro auswähle.

Muss ich da noch was bestimmtes beachten, oder steh ich komplett daneben :smile:

mfg MPunkt

Hallo,

also wenn ich diesen Code in ein Modul speicher und dann auf
„Ausführen“ klicke, kommt bei mir ein Fenster und will dass
ich ein Makro auswähle.

Muss ich da noch was bestimmtes beachten, oder steh ich
komplett daneben :smile:

so einfach geht es auch wieder nicht…

Gibt im Direktfenster mal

make_dirlist „C:\temp“

ein (oder ein geigneteres Verzeichnis) und drück Return.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Wenn ich dass mache, kommt die Fehlermeldung: „Fehler beim Kompilieren“

für diese Zeile „Dim fs As New Scripting.FileSystemObject“

könntest du mir eventuell den Code einwenig erklären? wie gesagt ich bin ziemlicher Anfänger in VBA und möchte ja auch etwas lernen und nicht einfach nur fremden Code einfügen.

mfg MPunkt

Hallo,

ja, sorry, hatte vergessen zu erwähnen, den Verweis auf MICROSOFT SCRIPTING RUNTIME (scrrun.dll) im VBA-Editor zu setzen.

M. E. ist der Code selbsterklärend: für jedes Unterverzeichnis ab dem angebenen Verzeichnis werden dessen Dateien durchlaufen und dabei jeder Dateinamen zu einem Gesamtstring zusammengebaut. Dieser String („liste“) wird dann in eine Datei geschrieben.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Danke vielmals, jetzt funkts.
werd mich am WE mal hinsetzten und schaun was ich da alles daraus machen kann.
Auf jeden Fall vielen Dank für die Tipps auch für den mit dem Tabellenaufbau.
Hoffe ich bring es jetzt alleine fertig :smile:

mfg MPunkt