Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
748to752
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
748to752
748to752
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Eigenschaften von Dateien in Listenfeld

Eigenschaften von Dateien in Listenfeld
24.03.2006 12:59:21
Dateien
Hallo,
innerhalb eines umfangreicheren Projektes möchte ich xls-Dateien in einem Ordner auslesen und in einem Listenfeld anzeigen. Mit Unterstützung des Forumarchives habe ich das auch prima hinbekommen. Nun möchte ich in weiteren Spalten des Listenfeldes das Erstellungsdatum und den Autor der jeweiligen Datei hinzufügen. Für dieses Problem - die Eigenschaften geschlossener Mappen auszulesen und in das Listenfeld einzutragen - bin ich leider noch nicht fündig geworden.
Hier mein bisheriger Code (in dem zusätzlich die gefundenen Dateinamen vor der Anzeige bearbeitet werden):

Sub DateiListe()
Dim Fs As FileSearch
Dim iCounter As Integer
Dim sPfad As String
Dim Ganze As String
Dim Trennpos As Integer
Dim Länge As Integer
Dim sDatei As String
Dim DateiAutor As String
Dim ErstellDatum As Date
sPfad = Speicherpfad
Set Fs = Application.FileSearch
fmÖffnen.LBoxDateien.Clear
With Fs
.LookIn = sPfad
.FileType = msoFileTypeExcelWorkbooks
.Filename = "*test_*"
.Execute
For iCounter = 1 To .FoundFiles.Count
Ganze = .FoundFiles(iCounter)
Trennpos = InStr(Ganze, "_")
Länge = Len(Ganze)
sDatei = Mid(Ganze, Trennpos, Länge)
fmÖffnen.LBoxDateien.AddItem (sDatei)
Next iCounter
End With
End Sub

Wer kann mir weiterhelfen?
Thomas

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eigenschaften von Dateien in Listenfeld
Dateien
Hallo Thomas
Lass dies mal in einem leeren Tabellenblatt laufen.
Sub Dateieigenschaften()
'von k.rola
Const STRFOLDER As String = "d:\Eigene Dateien" 'anpassen
Dim objShell As Object
Dim objFolder As Object
Dim x As Byte
Dim spalte As Integer
Dim zeile As Long
Dim varName, arrHeaders(34)
If Dir(STRFOLDER, 16) = "" Then
MsgBox "Der Ordner " & STRFOLDER & " wurde nicht gefunden!" & Space(10), 64, "weise hin..."
Exit Sub
End If
Application.ScreenUpdating = False
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(STRFOLDER)
spalte = 1
For x = 0 To 33
arrHeaders(x) = objFolder.GetDetailsOf(varName, x)
Cells(1, spalte + x) = arrHeaders(x)
Next
Rows(1).Font.Bold = True
zeile = 2
For Each varName In objFolder.Items
For x = 0 To 33
Cells(zeile, spalte + x) = objFolder.GetDetailsOf(varName, x)
Next
zeile = zeile + 1
Next
Columns.AutoFit
Application.ScreenUpdating = True
End Sub

Kann man auf eine Listbox anpassen.
ransi
Anzeige
AW: Eigenschaften von Dateien in Listenfeld
24.03.2006 14:53:20
Dateien
Hallo Ransi,
Dein Ansatz unterscheidet sich ja vollkommen von meinem bisherigen.
Überall habe ich bisher FileSearch als Grundlage gefunden, womit ich z.B. gezielt nach xls-Dateien und auch Namensbestandteile filtern kann. Analoges finde ich hier nicht. Ich habe zwar noch nicht getestet, aber im Code finde ich keine Anhaltspunkte für solche Einschränkungen. Vieleicht muss hier eine Kombination her, aber das kann ich noch nicht überschauen. Trotzdem zunächst vielen Dank.
Thomas
AW: Eigenschaften von Dateien in Listenfeld
Dateien
Hallo Thomas
Hier ist mal ein Beispiel das theoretisch laufen müsste.
Die Msgboxen zeigen die richtigen Werte, aber die 3 Spaltige ListBox zickt rum...
https://www.herber.de/bbs/user/32255.xls
Ich weiss nicht warum die ListBox die werte nicht annimmt.
Wenn du oder jemand anders weiss wo es da klemmt bitte ich um eine Rückmeldung.
ransi
Anzeige
AW: Eigenschaften von Dateien in Listenfeld
25.03.2006 15:08:38
Dateien
Hi ransi,
unter 2000 läuft es nicht.
For Each varName In objFolder.Items
ergibt Fehler, Objektvariable nicht festgelegt.
GetDetailsOf gibt es nihct in der Hilfe.
Gruß
Reinhard
AW: hm...
ransi
Hallo Reinhard
danke fürs testen.
http://www.microsoft.com/technet/scriptcenter/guide/sas_fil_lunl.mspx?mfr=true
Sollte also auch unter 2000 laufen.
Ich stelle mal "Frage noch offen".
Vieleicht schaut K.Rola mal rüber.
Von ihr ist der ursprüngliche code.
Jeder andere der was dazu sagen kann selbstverständlich auch melden.
ransi
Anzeige
AW: hm...
25.03.2006 16:49:01
Reinhard
Hallo ransi,
danke für die Info.
Es war mein Fehler, Fehler kommt wenn keine Datei gefunden wurde.
Aber neue Herausforderung, "Typen unverträglich", Fehlernr 13, bei
ListBox1(zeile, 0) = objFolder.GetDetailsOf(varName, 0)
msgbox objFolder.GetDetailsOf(varName, 0)
funktioniert.
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: hm...
ransi
hallo reinhard
Das meinte ich....
Zitat:
"Ich weiss nicht warum die ListBox die werte nicht annimmt."
Hatte mich da wohl missverständlich ausgedrückt.
ransi
AW: hm...
25.03.2006 17:46:59
Reinhard
Hallo ransi,
da ich es ungewohnt bin, fehlerhaften Code von dir zu haben kam ich gar nicht auf die Idee das im Code ein Fehler stecken könnte und habe den Hinweissatz missdeutet :-)
Option Explicit
Sub Dateieigenschaften1()
Const STRFOLDER As String = "c:\download" 'anpassen
Dim objShell As Object
Dim objFolder As Object
Dim spalte As Integer
Dim zeile As Long
Dim varName
Dim xx
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(STRFOLDER)
spalte = 1
ListBox1.Clear
zeile = 0
For Each varName In objFolder.items
If varName Like "*.xls" Then
ListBox1.AddItem
ListBox1.List(zeile, 0) = objFolder.GetDetailsOf(varName, 0)
ListBox1.List(zeile, 2) = objFolder.GetDetailsOf(varName, 4)
ListBox1.List(zeile, 3) = objFolder.GetDetailsOf(varName, 9)
zeile = zeile + 1
End If
Next
End Sub

Gruß
Reinhard
Anzeige
AW: Eigenschaften von Dateien in Listenfeld
Dateien


Hallo
Ein simples .additem....
Vielen Dank Rheinhard.
Hier nochmal der "aufgeräumte" code.
Vorausetzung ist eine Listbox mit wenigstens  3 spalten.
@ Thomas
Wenn du die auskommentierte Zeile aktivierst und die darunter löscht passt das auf deine vorgaben.
Option Explicit
Sub Dateieigenschaften()
Const STRFOLDER As String = "D:\Eigene Dateien" 'anpassen
Dim objShell As Object
Dim objFolder As Object
Dim zeile As Long
Dim varName
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(STRFOLDER)
ListBox1.Clear
zeile = 0
For Each varName In objFolder.items
    'if varname like"*test_*.xls" then 'Anpassung auf die gesuchten Dateien
    If varName Like "*.xls" Then
            With ListBox1
                .AddItem
                .List(zeile, 0) = objFolder.GetDetailsOf(varName, 0) 'Datei Name
                .List(zeile, 1) = objFolder.GetDetailsOf(varName, 4) 'Erstellt am:
                .List(zeile, 2) = objFolder.GetDetailsOf(varName, 9) 'Autor
             End With
        zeile = zeile + 1
    End If
Next
End Sub
Ransi


Anzeige
AW: Eigenschaften von Dateien in Listenfeld
25.03.2006 22:03:14
Dateien
Hallo Ransi und Reinhard,
danke, dass Ihr Euch mit meinem Problem rumgeschlagen habt.
Ich bin erst jetzt zum Test gekommen. Leider läuft es nicht. Laufzeitfehler 91 in der Zeile "For Each varName In objFolder.items". Bis auf den Pfad und den Namen der Listenboxen habe ich den Code so übernommen. Den Filtertext für meien Dateinamen kann ich später anpassen. Nun bin ich wieder ratlos.
Thomas
AW: Eigenschaften von Dateien in Listenfeld
26.03.2006 10:06:17
Dateien
Hallo Thomas,
der codesollte laufen,bei mir tut er es jedenfalls. Lösche mal nicht benötigte Leerzeichen am Anfang und Ende -- ans Zeilenende gehen und löschen bis die nächste Zeilehochgezogen wird, dann mit Enter wieder runterschieben. Manchmal sind da irgendwelche Haken beim Kopieren von Forumscode.
Ansonsten musst Du wahrscheinlich auch Deinen Filter anders programmieren:
If objFolder.GetDetailsOf(varName, 2) Like "Microsoft Excel-Arbeitsblatt" Then
varname ist der Name aus den erweiterten Dateieigenschaften und da steht nicht unbedingt die Extension mit dabei.
Anzeige
AW: Eigenschaften von Dateien in Listenfeld
26.03.2006 13:24:09
Dateien
Hallo André,
ich habe nochmals intensiv experimentiert. Zunächst ohne Erfolg. Dann habe ich noch eine Änderung von mir rückgängig gemacht und wie im Forum beschrieben den Pfad als Konstante definiert. Und wunderbar - es läuft! Nur leider brauche ich für mein Projekt einen variablen Speicherpfad. Vom Startort des Projektes ausgehend wird im übergeordneten Verzeichnis ein Ordner gesucht oder gegebenenfalls neu angelegt. Dort werden vom Programm erzeugte Mappen gespeichert und über die Listbox eingelesen oder auch gelöscht. Und das soll möglichst in allen Umgebungen auch auf verschiedenen Rechnern funktionieren. Mein Pfad muss also eine Variable bleiben. Hier bin ich mit meinem Latein am Ende. Wer kann weiter helfen?
Thomas
Anzeige
AW: Eigenschaften von Dateien in Listenfeld
Dateien


Hallo Thomas
Die neue Problematik habe ich glaube ich nicht ganz verstanden.
so wird im übergeordneten Verzeichniss gesucht:
Option Explicit
Sub Dateieigenschaften()
Dim STRFOLDER
Dim objShell As Object
Dim objFolder As Object
Dim fso As Object
Dim zeile As Long
Dim varName
Set objShell = CreateObject("Shell.Application")
'####
'Hier wird der übergeordnete Ordner festgelegt
Set fso = CreateObject("Scripting.filesystemobject")
STRFOLDER = CStr(fso.getfolder(ThisWorkbook.Path).Parentfolder.Path)
MsgBox STRFOLDER
'####
Set objFolder = objShell.Namespace(STRFOLDER)
ListBox1.Clear
zeile = 0
For Each varName In objFolder.items
    'if varname like"*test_*.xls" then 'Anpassung auf die gesuchten Dateien
    If varName Like "*.xls" Then
            With ListBox1
                .AddItem
                .List(zeile, 0) = objFolder.GetDetailsOf(varName, 0) 'Datei Name
                .List(zeile, 1) = objFolder.GetDetailsOf(varName, 4) 'Erstellt am:
                .List(zeile, 2) = objFolder.GetDetailsOf(varName, 9) 'Autor
             End With
        zeile = zeile + 1
    End If
Next
End Sub
wenn es das nicht ist, musst du dich nochmal melden.
ransi


Anzeige
AW: Eigenschaften von Dateien in Listenfeld
Dateien
Hallo thomas
wenn es ein bestimmter ordner im übergeordneten Verzeichniss sein soll dann so:
'####
'Hier wird der übergeordnete Ordner festgelegt
Set fso = CreateObject("Scripting.filesystemobject")
STRFOLDER = CStr(fso.getfolder(ThisWorkbook.Path).Parentfolder.Path & "\Dein Ordnername")
MsgBox STRFOLDER
'####

ransi
AW: Eigenschaften von Dateien in Listenfeld
26.03.2006 14:37:02
Dateien
Hallo Ransi,
ich hatte für meine Tests einfach "Application.ActiveWorkbook.Path" als Pfad und damit als Variable gesetzt und damit lief der Code nicht. Der identische Pfad als Konstante eingesetzt und alles ist o.k.. Woran liegt das? Bei Deinem Code kommt ja auch der Pfad als Variable ("ThisWorkbook.Path"). Also muss es gehen. Nur wie?
Mit dem übergeordneten Ordner als Pfad habe ich mich noch nicht beschäftigt. Das kommt später. Dafür werde ich mir Deine Vorschläge auf alle Fälle aufheben.
Thomas
Anzeige
AW: Eigenschaften von Dateien in Listenfeld
27.03.2006 15:49:09
Dateien
Hallo Ransi,
vielen Dank Dir und den anderen. Jetzt läuft alles prima. Ein kleiner Fehler war die Ursache, warum ich mit dem variablen Pfad nicht klar kam. Ich wollte unbedingt STRFOLDER als String deklarieren und da lief eben nichts. Ihr habt mir super geholfen.
Gruß
Thomas

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige