Clever-Excel-Forum

Normale Version: nur die ersten 10 Zeilen eines Ordnerinhalts auflisten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,
ich möchte per VBA die ersten 10 Dateinamen auslesen und in Excel schreiben.
Für den kompletten Ordnerinhalt nutze ich folgende Prozedur:

Sub DateienAuflisten()

Dim lngZeile As Long
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDateienliste As Object
Dim objDatei As Object

Set objFileSystem = CreateObject("scripting.FileSystemObject")
Set objVerzeichnis = objFileSystem.GetFolder("X:\Ankdg\Plan")
Set objDateienliste = objVerzeichnis.Files

lngZeile = 1

For Each objDatei In objDateienliste
    If Not objDatei Is Nothing Then
          ActiveSheet.Cells(lngZeile, 1) = objDatei.Name
          lngZeile = lngZeile + 1
    End If
Next objDatei

End Sub

Diese Prozedur funktioniert einwandfrei, dauert allerdings umso länger, je mehr Dateien im Verzeichnis sind.
Die ersten 10 Einträge würden mir da reichen.

Weiss jemand eine Lösung?
Herzlichen Dank vorab!
Hallo,

dann füge nach der Zeile:

lngZeile =lngZeile+1

folgende Zeile ein:
IF lngZeile>10 THEN EXIT FOR
Hallo Anton,
vielen Dank für die schnelle Hilfe.
Die Ergänzung für das Makro funktioniert zunächst reibungslos :)
Ein kleines Problem tut sich dabei jedoch auf.
Ich bekomme die letzten (ältesten) 10 Dateien der Liste angezeigt, nicht die neuesten 10.

Sorry, das hatte ich in meiner Frage nicht berücksichtigt.

Gibt es hier noch einen "Kniff" um die jüngsten 10 Dateien einer Liste anzuzeigen?
Oder im Extremfall nur die eine Aktuellste?

Nochmals Danke für die Hilfe!

Viele Grüße
Hallo,

bevor jemand eine Lösung mit "dir /b /o-d *.*" zeigt, eine Variante mit Powershell:

Code:
$Pfad = 'c:\temp'
$item = get-childitem -Path $Pfad |  sort CreationTime | select -last 10
$item.name, $item.creationtime

Wenn alles in eine Zeile geschrieben wird, sollte auch ein Aufruf aus VBA möglich sein.

mfg
Hallo Fennek,
hab ich probiert und bin bis in die PowerShell gekommen.
Muss ich das Skript jetzt irgendwohin abspeichen und Excel VBA aufrufen?
Oder wie binde ich das in VBA mit ein?
Die drei Kommandozeilen der PowerShell mit Semikolon trennen?
Ich habe hier keinerlei Erfahrung und auch keinen Plan.

Wenn Du nochmal so freundlich wärst ...

Viele Grüße und herzlichen Dank!
Powershell aus VBA:

Code:
Sub T_1()
Pfad = "c:\temp"

ps = "$Pfad = 'c:\temp';$item = get-childitem -Path $Pfad |  sort CreationTime | select -last 10;($item.name + ' ' + $item.creationtime)"

Ar = Split(CreateObject("wscript.shell").exec("PowerShell " & ps).stdout.readall, vbCrLf)


Debug.Print UBound(Ar)
For i = 0 To UBound(Ar) - 1
    Debug.Print Pfad & "\" & Ar(i)
Next i
End Sub

Es sollte mit allen Ein-Zeilern gehen, aber nicht mit dem Aufruf einer *.ps1 Datei.

Genauso, nur einfacher, geht der CMD-Aufruf.
Hallo Fennek,
Script läuft, Shell-Fenster geht kurz auf und schließt sich danach wieder.
Im Excel-Tabellenblatt stehen jedoch die 10 Dateien nicht. Die Spalte A bleibt leer.
Irgendwie muss die "gefilterte" Liste jetzt noch in das Tabellenblatt geschrieben werden.

Kannst Du hier nochmal helfen?

Dein Script habe ich angepasst (Pfad geändert), und läuft ohne Fehlermeldung ab:

Sub PowerShell()
pfad = "X:\Ankdg\Plan"

ps = "$Pfad = 'X:\Ankdg\Plan';$item = get-childitem -Path $Pfad |  sort CreationTime | select -last 10;($item.name + ' ' + $item.creationtime)"

Ar = Split(CreateObject("wscript.shell").exec("PowerShell " & ps).stdout.readall, vbCrLf)

Debug.Print UBound(Ar)
For i = 0 To UBound(Ar) - 1
    Debug.Print pfad & "\" & Ar(i)
Next i
End Sub
Kleiner Spaß am Rande: Frage mal den Admin nach Virenschutz.

Die Ausgabe erfolgt ins Debug-Fenster des VBE.

Versuche mal diese Änderung:

Code:
Sub T_1()
Pfad = "c:\temp"

ps = "$Pfad = 'c:\temp';$item = get-childitem -Path $Pfad |  sort CreationTime | select -last 10;($item.name + ' ' + $item.creationtime)"

Ar = Split(CreateObject("wscript.shell").exec("PowerShell " & ps).stdout.readall, vbCrLf)


Debug.Print UBound(Ar)
For i = lbound(Ar) To UBound(Ar) - 1
    cells(i+1,1) = Pfad & "\" & Ar(i)
Next i
End Sub
Deutlich besser, die Zeilen werden gefüllt,
Das Ergebnis sieht so aus:
[
Bild bitte so als Datei hochladen: Klick mich!
]

Die ersten 10 Zeilen würden reichen, und wenn dort dann nur noch der Dateiname stehen würde, wärs perfekt, bekäme ich jedoch auch per Formel isoliert.

[attachment=39223]