Problem mit VB-Script (Laufzeitfehler 5)
Hallo Pogrammierer,
ein VB-Script (wohl gängiger Inhalt) bringt mir einen Laufzeitfehler 5 (ungültiger Prozeduraufruf oder ungültiges Argument) in der drittletzten Zeile VerzName = Dir$().
Sinn ist es, mit diesem Script
in Spalte 1 ab der 6. Zeile den Verzeichnisnamen
in Spalte 2 ab der 6. Zeile zeilenweise die Dateinamen des Verzeichnisses aufzulisten
und das für alle bestehenden Verzeichnisse
Script:
Und: wie kann man die Verzeichnisse sortieren? (die Verzeichnisse bestehen nur aus Ziffern)
Ich danke sehr!
Gruß
Alexander
[Edit Biber] Codeformatierung zwangsverordnet. [/Edit]
ein VB-Script (wohl gängiger Inhalt) bringt mir einen Laufzeitfehler 5 (ungültiger Prozeduraufruf oder ungültiges Argument) in der drittletzten Zeile VerzName = Dir$().
Sinn ist es, mit diesem Script
in Spalte 1 ab der 6. Zeile den Verzeichnisnamen
in Spalte 2 ab der 6. Zeile zeilenweise die Dateinamen des Verzeichnisses aufzulisten
und das für alle bestehenden Verzeichnisse
Script:
Private Sub CommandButton2_Click()
Dim VerzName, DateiName, VerzPfad, DateiTyp, VerzListe(), DateiListe() As String
Dim VerzNr, DateiNr, TempListe, Attrib As Integer
VerzPfad = "C:\Programme\Brother" '(Testverzeichnis)
DateiTyp = "*.*"
' Liste mit Unterverzeichnissen erstellen
VerzNr = 0
VerzName = Dir$(VerzPfad & "\", Attrib Or vbDirectory)
While VerzName <> vbNullString
If (VerzName <> ".") And (VerzName <> "..") Then
' Handelt es sich um ein Verzeichnis?
If GetAttr(VerzPfad & "\" & VerzName) And vbDirectory Then
VerzNr = VerzNr + 1
ReDim Preserve VerzListe(1 To VerzNr)
VerzListe(VerzNr) = VerzName
' Liste mit Dateinamen erstellen
If Right$(VerzPfad, 1) = "\" Then
DateiName = Dir$(VerzPfad & DateiTyp, Attrib)
Else
DateiName = Dir$(VerzPfad & "\" & DateiTyp, Attrib)
End If
DateiNr = 0
While DateiName <> vbNullString
If (DateiName <> ".") And (DateiName <> "..") Then
DateiNr = DateiNr + 1
ReDim Preserve DateiListe(1 To DateiNr)
DateiListe(DateiNr) = VerzPfad & "\" & DateiName
Worksheets("Check").Cells(VerzNr + DateiNr + 5, 1) = VerzName
Worksheets("Check").Cells(VerzNr + DateiNr + 5, 2) = DateiName
End If
DateiName = Dir$()
Wend
End If
End If
VerzName = Dir$() ' Nächsten Datei- oder Verzeichnisnamen holen
Wend
End Sub
Und: wie kann man die Verzeichnisse sortieren? (die Verzeichnisse bestehen nur aus Ziffern)
Ich danke sehr!
Gruß
Alexander
[Edit Biber] Codeformatierung zwangsverordnet. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 13.05.2010 um 17:58:41 Uhr
Hallo Pogrammierer,
Hmm, diese Anrede klingt ein wenig abwertend irgendwie...Und auf bastla angewandt sind sowohl "Gramm" wie auch die Vorsilbe vollkommen verfehlt.
Content-ID: 142765
Url: https://administrator.de/contentid/142765
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo alexander01!
Um zumindest zu erklären, warum das so nicht funktioniert, Zitate aus der VBA-Hilfe:
Außerdem:
Grüße
bastla
[Edit] Hallo LotPings! Seit ich den Winterschlaf nun doch hinter mir gelassen habe und nur mehr mit der Frühjahrsmüdigkeit kämpfe, geht's so einigermaßen ... [/Edit]
Um zumindest zu erklären, warum das so nicht funktioniert, Zitate aus der VBA-Hilfe:
Wenn keine weiteren übereinstimmenden Dateinamen gefunden werden, gibt die Dir-Funktion eine Null-Zeichenfolge ("") zurück. Wurde einmal eine Null-Zeichenfolge zurückgegeben, müssen Sie bei nachfolgenden Aufrufen wieder das Argument Pfadname angeben, da sonst ein Fehler auftritt.
Wenn Du also die Dateiliste durch hast, müsstest Du dem nächsten "Dir
" (das "$" dahinter ist mittlerweile zwar nicht schädlich, aber nicht mehr nötig) wieder einen Pfad übergeben.Außerdem:
Ein rekursiver Aufruf der Dir-Funktion ist allerdings nicht möglich.
Das Sortieren (wenn es dann etwas zu Sortierendes geben wird) sollte sich unter Verwendung der entsprechenden Tabellenfunktion realisieren lassen.Grüße
bastla
[Edit] Hallo LotPings! Seit ich den Winterschlaf nun doch hinter mir gelassen habe und nur mehr mit der Frühjahrsmüdigkeit kämpfe, geht's so einigermaßen ... [/Edit]
Zitat von @alexander01:
ein VB-Script (wohl gängiger Inhalt) bringt mir einen Laufzeitfehler 5 (ungültiger Prozeduraufruf oder ungültiges
Argument) in der drittletzten Zeile VerzName = Dir$().
Sorry das ist kein vbscript, sieht eher nach Excel VBA aus.ein VB-Script (wohl gängiger Inhalt) bringt mir einen Laufzeitfehler 5 (ungültiger Prozeduraufruf oder ungültiges
Argument) in der drittletzten Zeile VerzName = Dir$().
Und bevor man sich das näher ansieht,
bitte formatiere deinen Code zur besseren Les-/Referenzier-barkeit unbedingt mit den dafür vorgesehenen in der Formatierungshilfe
Auch Einrückungen schaden der Lesbarkeit nicht.
Gruß
LotPings
Hallo Bastla, Ich leide wohl noch an der Feiertagsmüdigkeit
... etwas konkreter (und unter Verwendung einer alternativen Zugriffsmöglichkeit auf das Dateisystem):
Da dieser Ansatz rekursiv arbeitet und daher die gesamte Ordnerstruktur unterhalb des angegebenen Startordners "abgrast", würde sich vielleicht eher
anbieten - allenfalls auch als relativer Pfad:
Grüße
bastla
P.S.: @Biber: Da "Pogrammierer" keinerlei phonetische Ähnlichkeit mit "Scripter" oder "Batcher" aufweist, hatte ich mich ohnehin nicht angesprochen gefühlt ...
Dim R, C, fso
Private Sub CommandButton2_Click()
Ordner = "C:\Programme\Brother" '(Testverzeichnis)
R = 5
C = 3
Set fso = CreateObject("Scripting.FileSystemObject")
DoFolders fso.GetFolder(Ordner)
Cells(R, C).CurrentRegion.Sort Key1:=Cells(R, C), Order1:=xlAscending, Header:=xlNo
MsgBox "Fertig."
End Sub
Sub DoFolders(Folder)
For Each File In Folder.Files
Cells(R, C) = Folder.Name
Cells(R, C + 1) = File.Name
R = R + 1
Next
For Each SubFolder In Folder.SubFolders
DoFolders SubFolder
Next
End Sub
Cells(R, C) = Folder.Path
Cells(R, C) = Replace(Folder.Path, Ordner & "\", "", , , vbTextCompare)
bastla
P.S.: @Biber: Da "Pogrammierer" keinerlei phonetische Ähnlichkeit mit "Scripter" oder "Batcher" aufweist, hatte ich mich ohnehin nicht angesprochen gefühlt ...