PDA

Vollständige Version anzeigen : Excel 2003 / VBA / Prüfen ob Verzeichnis leer ist


alej
27.03.2012, 11:28
Hallo zusammen,

ich stehe vor folgendem Problem, ich habe einen Ordner mit ca. 300 Unterordnern, Aufbau wie folgt

c:\kunden\kundennr\daten

Jetzt versuche ich zu prüfen ob das Verzeichnis "Daten" Dateien enthält oder nicht, wenn keine Daten vorhanden sind will ich eine Rückmeldung in Form von einer 1 und den kompletten Pfad zu dem Ordner in dem keine Datei vorhanden ist.

Die Prüfung ob ein Ordner leer ist bzw. keinen Unterodner enthält bin ich wie folgt angegangen


Sub test()
Dim fs As Object, ordner As Object
Set fs = CreateObject("Scripting.filesystemobject")
Set ordner = fs.getfolder("c:\kunden\kundennr\daten")
If ordner.subfolders.Count * 1 + ordner.Files.Count * 1 = 0 Then
MsgBox "Ordner enthält keine Daten"
Else
MsgBox "Ordner enthält Daten"
End If
End Sub


Wie bekomme ich es aber hin, das der Ordner der geprüft wurde wieder verlassen wird und in den nächsten Ordner gewechselt wird und zwar solange bis der letzte Ordner erreicht wurde und ein Eintrag in Excel mit einer 1 und dem Pfad zu dem Ordner der keine Daten enthält erstellt wird.

Die Verzeichnisstruktur ist immer wie oben angegeben.
Gruß
alej

IngGi
27.03.2012, 13:39
Hallo alej,

versuch's mal so:

<blockquote><div style='background-color: #F2F2FF; border: 1px solid #3300B2; padding: 0px 24px;'><pre style='font-size: 12px; padding: 0px 10px;'><span style="color: #0000FF">Sub</span> test<span style='color: #B200CC;'>(</span><span style='color: #B200CC;'>)</span><br><br><span style="color: #0000FF">Dim</span> fs <span style="color: #0000FF">As</span> <span style="color: #0000FF">Object</span>, ordner <span style="color: #0000FF">As</span> <span style="color: #0000FF">Object</span>, unterordner <span style="color: #0000FF">As</span> <span style="color: #0000FF">Object</span><br><br><br><span style="color: #0000FF">Set</span> fs = CreateObject<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"Scripting.filesystemobject"</span><span style='color: #B200CC;'>)</span><br><span style="color: #0000FF">Set</span> ordner = fs.GetFolder<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"c:\kunden\kundennr\daten"</span><span style='color: #B200CC;'>)</span><br><br><span style="color: #0000FF">For</span> <span style="color: #0000FF">Each</span> unterordner <span style="color: #0000FF">In</span> ordner.SubFolders<br> <span style="color: #0000FF">If</span> unterordner.SubFolders.Count *<span style="color: #FF0000"> 1</span> + unterordner.Files.Count *<span style="color: #FF0000"> 1</span> =<span style="color: #FF0000"> 0</span> <span style="color: #0000FF">Then</span><br> MsgBox unterordner.Name & <span style='color: #CC9900;'>" enthält keine Daten"</span><br> <span style="color: #0000FF">Else</span><br> MsgBox unterordner.Name & <span style='color: #CC9900;'>" enthält Daten"</span><br> <span style="color: #0000FF">End </span><span style="color: #0000FF">If</span><br><span style="color: #0000FF">Next</span> <span style='color: #008000;'>'unterordner<br></span><br><span style="color: #0000FF">End </span><span style="color: #0000FF">Sub</span><br></pre><hr style='color: #3300B2; background: #3300B2; height: 1px;'><p style='font-size: 8px; font-family: Verdana; text-align: right;'>VBA/HTML - CodeConverter für Excelforen<br>AddIn für Excel XP+2003 - komplett in VBA geschrieben von IngGi<br>Anbindung an VBE-Kontextmenü geklaut ;-) bei: <a href='http://www.cpearson.com/excel/VbeMenus.aspx'>http://www.cpearson.com/excel/VbeMenus.aspx</a></p></div></blockquote>

Gruß Ingolf

alej
27.03.2012, 14:25
Hallo Ingolf,

vielen Dank für die schnelle Rückmeldung.

Die Problematik ist das ich ausschließlich das Verzeichnis Daten überprüfen möchte.

Gedanklich bin ich das so durchgegangen

cd c:\kunden\kunde01\daten
wenn

keine daten vorhanden

dann

eine neue Zeile in Excel mit einer 1 in der Spalte und in Spalte 2 den Pfad
zu dem Ordner in dem keine Daten sind

wenn

daten vorhanden

dann

cd c:\kunden\kunde02\daten

usw.

Wenn Daten vorhanden sind, ist das nicht wichtig, mir kommt es vor allem auf die Ordner an in denen sich keine Daten befinden.

Wichtig ist auch das nur in dem Ordner Daten gesucht wird, da sich in den übergeordneten Ordnern bzw. im Ordner Kunden definitiv immer Daten befinden und die Prüfung soll solange durchgeführt werden bis die ca. 300 Ordner oder auch mehr komplett durchsucht wurden.

Gruß
alej

IngGi
27.03.2012, 14:47
Hallo alej,

aus deinem ersten Post war das so nicht herauszulesen. Mit den Infos aus dem zweiten Post müsste das dann so passen, wenn ich mich nicht verhauen habe:

<blockquote><div style='background-color: #F2F2FF; border: 1px solid #3300B2; padding: 0px 24px;'><pre style='font-size: 12px; padding: 0px 10px;'><span style="color: #0000FF">Sub</span> test<span style='color: #B200CC;'>(</span><span style='color: #B200CC;'>)</span><br><br><span style="color: #0000FF">Dim</span> fs <span style="color: #0000FF">As</span> <span style="color: #0000FF">Object</span>, ordner <span style="color: #0000FF">As</span> <span style="color: #0000FF">Object</span><br><span style="color: #0000FF">Dim</span> unterordner <span style="color: #0000FF">As</span> <span style="color: #0000FF">Object</span>, datenordner <span style="color: #0000FF">As</span> <span style="color: #0000FF">Object</span><br><br><br><span style="color: #0000FF">Set</span> fs = CreateObject<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"Scripting.filesystemobject"</span><span style='color: #B200CC;'>)</span><br><span style="color: #0000FF">Set</span> ordner = fs.GetFolder<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"c:\kunden"</span><span style='color: #B200CC;'>)</span><br><br><span style="color: #0000FF">For</span> <span style="color: #0000FF">Each</span> unterordner <span style="color: #0000FF">In</span> ordner.SubFolders<br> <span style="color: #0000FF">Set</span> datenordner = fso.GetFolder<span style='color: #B200CC;'>(</span>unterordner.Path & <span style='color: #CC9900;'>"\daten"</span><span style='color: #B200CC;'>)</span><br> <span style="color: #0000FF">If</span> datenordner.SubFolders.Count + datenordner.Files.Count =<span style="color: #FF0000"> 0</span> <span style="color: #0000FF">Then</span><br> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"A"</span> & Rows.Count<span style='color: #B200CC;'>)</span>.End<span style='color: #B200CC;'>(</span>xlUp<span style='color: #B200CC;'>)</span>.Offset<span style='color: #B200CC;'>(</span><span style="color: #FF0000">1</span>,<span style="color: #FF0000"> 0</span><span style='color: #B200CC;'>)</span> =<span style="color: #FF0000"> 1</span><br> Range<span style='color: #B200CC;'>(</span><span style='color: #CC9900;'>"A"</span> & Rows.Count<span style='color: #B200CC;'>)</span>.End<span style='color: #B200CC;'>(</span>xlUp<span style='color: #B200CC;'>)</span>.Offset<span style='color: #B200CC;'>(</span><span style="color: #FF0000">0</span>,<span style="color: #FF0000"> 1</span><span style='color: #B200CC;'>)</span> = datenordner.Path<br> <span style="color: #0000FF">End </span><span style="color: #0000FF">If</span><br><span style="color: #0000FF">Next</span> <span style='color: #008000;'>'unterordner<br></span><br><span style="color: #0000FF">Set</span> datenordner = <span style="color: #0000FF">Nothing</span><br><span style="color: #0000FF">Set</span> unterordner = <span style="color: #0000FF">Nothing</span><br><span style="color: #0000FF">Set</span> ordner = <span style="color: #0000FF">Nothing</span><br><span style="color: #0000FF">Set</span> fs = <span style="color: #0000FF">Nothing</span><br><br><span style="color: #0000FF">End </span><span style="color: #0000FF">Sub</span><br></pre><hr style='color: #3300B2; background: #3300B2; height: 1px;'><p style='font-size: 8px; font-family: Verdana; text-align: right;'>VBA/HTML - CodeConverter für Excelforen<br>AddIn für Excel XP+2003 - komplett in VBA geschrieben von IngGi<br>Anbindung an VBE-Kontextmenü geklaut ;-) bei: <a href='http://www.cpearson.com/excel/VbeMenus.aspx'>http://www.cpearson.com/excel/VbeMenus.aspx</a></p></div></blockquote>

Gruß Ingolf

alej
27.03.2012, 15:10
Hallo Ingolf,

leider kann ich Dein Beispiel nicht ausprobieren, ich erhalte einen Laufzeitfehler 424 Objekt erforderlich.

Gruß
alej

IngGi
27.03.2012, 15:21
Hallo alej,

sorry, da hat sich ein kleiner Fehler eingeschlichen. Ersetze in der Programmzeile

Set datenordner = fso.GetFolder(unterordner.Path & "\daten")

"fso" durch "fs".

Gruß Ingolf

alej
27.03.2012, 15:26
@Ingolf

YOU MADE MY DAY

Vielen Dank

Gruß
alej