Registriert seit: 12.01.2018
Version(en): Office 14
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.
Folgende(r) 1 Nutzer sagt Danke an Rumo0815 für diesen Beitrag:1 Nutzer sagt Danke an Rumo0815 für diesen Beitrag 28
• EA1950
Registriert seit: 02.12.2017
Version(en): Microsoft365
Hallo,
dann füge nach der Zeile:
lngZeile =lngZeile+1
folgende Zeile ein:
IF lngZeile>10 THEN EXIT FOR
Gruß Anton.
Windows 10 64bit
Office365 32bit
Folgende(r) 1 Nutzer sagt Danke an EA1950 für diesen Beitrag:1 Nutzer sagt Danke an EA1950 für diesen Beitrag 28
• Rumo0815
Registriert seit: 12.01.2018
Version(en): Office 14
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.
Registriert seit: 06.12.2015
Version(en): 2016
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:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28
• Rumo0815
Registriert seit: 12.01.2018
Version(en): Office 14
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.
Registriert seit: 06.12.2015
Version(en): 2016
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.
Registriert seit: 12.01.2018
Version(en): Office 14
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.
Registriert seit: 06.12.2015
Version(en): 2016
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
Registriert seit: 12.01.2018
Version(en): Office 14
23.06.2021, 15:33
(Dieser Beitrag wurde zuletzt bearbeitet: 23.06.2021, 15:37 von Rumo0815.)
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.