Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

nur die ersten 10 Zeilen eines Ordnerinhalts auflisten
#1
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!
Viele Grüße
Rumo0815
------------------------
Bei Licht betrachtet ist der Leithammel auch nur ein Schaf.  19
[-] Folgende(r) 1 Nutzer sagt Danke an Rumo0815 für diesen Beitrag:
  • EA1950
Antworten Top
#2
Hallo,

dann füge nach der Zeile:

lngZeile =lngZeile+1

folgende Zeile ein:
IF lngZeile>10 THEN EXIT FOR
Mit lieben Grüßen
Anton.

Windows 10 64bit
Office365 32bit
[-] Folgende(r) 1 Nutzer sagt Danke an EA1950 für diesen Beitrag:
  • Rumo0815
Antworten Top
#3
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
Viele Grüße
Rumo0815
------------------------
Bei Licht betrachtet ist der Leithammel auch nur ein Schaf.  19
Antworten Top
#4
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
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • Rumo0815
Antworten Top
#5
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!
Viele Grüße
Rumo0815
------------------------
Bei Licht betrachtet ist der Leithammel auch nur ein Schaf.  19
Antworten Top
#6
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.
Antworten Top
#7
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
Viele Grüße
Rumo0815
------------------------
Bei Licht betrachtet ist der Leithammel auch nur ein Schaf.  19
Antworten Top
#8
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
Antworten Top
#9
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.

   
Viele Grüße
Rumo0815
------------------------
Bei Licht betrachtet ist der Leithammel auch nur ein Schaf.  19
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste