spinnifex
Goto Top

File.DateCreated liefert Erstelldatum des Verzeichnisses statt der Datei

Hallo liebe Admins,

ich lese per VBA die Liste der Dateien eines Verzeichnisses ein. Gebraucht werden Dateiname.ext und Erstelldatum. Der folgende Code tut schon beinahe, was er soll, nur, dass er mir nicht das Erstelldatum der Dateien einliest, sondern das des Verzeichnisses. Was mache ich falsch?

Sub Bild_Import()

Dim strFile, i, objFileSystem, objFile, strDir
strDir = "C:\Test\"  
i = 1
Cells(i, 1).Value = "Dateiname"  
Cells(i, 2).Value = "erstellt"  
Range(Cells(i, 1), Cells(i, 2)).Font.Bold = True

On Error GoTo Ende:
ChDir strDir
strFile = Dir$(strDir + "*.*")  
 Do While strFile <> ""  
   i = i + 1
   Cells(i, 1).Value = strFile
   Set objFileSystem = CreateObject("Scripting.FileSystemObject")  
   Set objFile = objFileSystem.GetFile(strFile)
   Cells(i, 2).Value = objFile.DateCreated
   strFile = Dir$()
  Loop
  ActiveSheet.Columns("A:C").AutoFit  
  Exit Sub

Ende:
  MsgBox "Das angegebene Verzeichnis " + strDir + " existiert nicht!", vbCritical  
End Sub

Vielen Dank für Eure Hilfe!!

Spinnifex

Content-ID: 299573

Url: https://administrator.de/contentid/299573

Ausgedruckt am: 25.11.2024 um 08:11 Uhr

spinnifex
spinnifex 19.03.2016 um 13:23:15 Uhr
Goto Top
Auch wenn ich
  • es nicht verstehe warum die Variante oben nicht funktioniert
  • es den folgenden Workaround nicht mag ...
ersetzt man die Zeile 18 oben durch
   Cells(i, 2).Value = FileDateTime(strDir + strFile)
dann funktionierts.

Schönes Wochenende!

Spinnifex
Biber
Biber 20.03.2016 aktualisiert um 00:34:10 Uhr
Goto Top
Moin spinnifex,

vermutlich bist du bzw. dein Schnipsel mit dem Befehl ChDir strDir auf die Brettera gegangen.
Falls du das Makro in einem Excelsheet auf einem anderen Laufwerk gestartet hast.
Aus der VBA--Hilfe:
Die ChDir-Anweisung wechselt das Standardverzeichnis, aber nicht das Standardlaufwerk.

Aber den Fehler wirst du nicht sehen, wenn du den einzigen möglichen Fehler mit einer selbst geschriebenen Fehlermeldung vorsiehst.

Und ganz gruselig ist immer neue Erzeugen eines FileSystemObjects innerhalb einer Do-While-Schleife für jeweils 3 Millsekunden... .
Das trägt massgeblich zur Klimaerwärmung bei, hat aber wenig sittlichen Mehrwert,

Auch das krude Zusammenwürfeln von FileSystemObject-Methoden einerseits und den ChDir/Dir$-Relikten andererseits ist nicht wirklich ästhetisch.

Und warum die Sub nun ausgerechnet Bild_Import() genannt wurde... *grybel*

Als mein Baby hätte sie wahrscheinlich den Namen MeeresRauschen() bekommen, in etwa in dieser Form:

Sub MeeresRauschen()

Dim i, fso, f, strDir
strDir = "D:\Temp\"  
i = 1
Cells(i, 1).Value = "Dateiname"  
Cells(i, 2).Value = "erstellt"  
Range(Cells(i, 1), Cells(i, 2)).Font.Bold = True
On Error GoTo Tilt:
Set fso = CreateObject("Scripting.FileSystemObject")  

For Each f In fso.GetFolder(strDir).Files
   i = i + 1
   Cells(i, 1).Value = f.Name
   Cells(i, 2).Value = f.DateCreated
Next
  ActiveSheet.Columns("A:C").AutoFit  
  Exit Sub

Tilt:
  
 MsgBox "ErrNo #" & Str(Err.Number) & " " & Err.Description, vbCritical  
End Sub
.

Grüße
Biber
spinnifex
spinnifex 23.03.2016 um 16:54:24 Uhr
Goto Top
Hallo Biber,

herzlichen Dank für Deinen Beitrag, der (einem VBA-Laien wie mir zwar noch wenig fachlich geholfen, aber immerhin) für ein ziemlich breites Grinsen gesorgt hat, weil Du beweist, dass man hier auch fröhlich kommunizieren kann. DANKESCHÖN!

Deinen Code werde ich mal testen, allein um die Klimaerwärmung zu vermeiden. Zum Standard-Laufwerk/Verzeichnis und Sub-Namen: Der Schnipsel hier ist Teil der einer Sub, der tatsächlich nur auf einem Laufwerk stattfindet. Im zweiten Schritt importiere ich Bilder von Wechseldatenträgern.Um weiteren freundlichen Spott zu vermeiden, werde ich aber erst hier einstellen, wenn wirklich alles läuft.

Viel Spaß noch und Dankeschön!

Spinnifex
Biber
Biber 23.03.2016 um 18:12:05 Uhr
Goto Top
Moin spinnifex,


Zitat von @spinnifex:

Um weiteren freundlichen Spott zu vermeiden ...
Die Vermeidung von freundlichem Spott (als Ziel des selbigen) ist mir bisher in diesem Forum noch nicht gelungen.
Aber wahrscheinlich bin ich noch nicht lange genug dabei. face-wink

Bevor du meinen etwas umweltschonenderen Schnipsel antestest, ersetze doch mal in deinem Gestunkele Code deine Msgbox()-Zeile durch meine.
Nur für die Nachwelt und aus Neugier, um mal den Fehler zu sehen.

... werde ich aber erst hier einstellen, wenn wirklich alles läuft.
Dieser Zustand lässt sich bestenfalls in einem Oneliner erreichen.
Ab einer Codelänge >= 2 Zeilen faktisch ausgeschlossen.
Aber ich werde auf dein vorläufig endgültiges Ergebnis warten.

Danke für dein Feedback & Grüße
Biber