Microsoft Excel

Herbers Excel/VBA-Archiv

FileSystemObject Frage

Betrifft: FileSystemObject Frage von: Paul
Geschrieben am: 29.07.2007 02:15:01

hi nochmals,
nach einigem Suchen haben ich doch etwas passendes gefunden, das aber jedoch einen Fehler hat, oder bei mir nicht richtig funzt.
Code:

Function GetFiles(strPath As String, _
                dctDict As Scripting.Dictionary, _
                Optional blnRecursive As Boolean) As Boolean
              
   ' This procedure returns all the files in a directory into
   ' a Dictionary object. If called recursively, it also returns
   ' all files in subfolders.
   
   Dim fsoSysObj      As Scripting.FileSystemObject
   Dim fdrFolder      As Scripting.Folder
   Dim fdrSubFolder   As Scripting.Folder
   Dim filFile        As Scripting.File
   
   ' Return new FileSystemObject.
   Set fsoSysObj = New Scripting.FileSystemObject
   
   On Error Resume Next
   ' Get folder.
   Set fdrFolder = fsoSysObj.GetFolder(strPath)
   If Err <> 0 Then
      ' Incorrect path.
      GetFiles = False
      GoTo GetFiles_End
   End If
   On Error GoTo 0
   
   ' Loop through Files collection, adding to dictionary.
   For Each filFile In fdrFolder.Files
      dctDict.Add filFile.path, filFile.path
   Next filFile

   ' If Recursive flag is true, call recursively.
   If blnRecursive Then
      For Each fdrSubFolder In fdrFolder.SubFolders
         GetFiles fdrSubFolder.path, dctDict, True
      Next fdrSubFolder
   End If

   ' Return True if no error occurred.
   GetFiles = True
   
GetFiles_End:
   Exit Function
End Function



und zwar nimmt er all die leeren Ordner nicht ins Dictionary auf. Warum?
Laut Mixrosoft HP:
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnarofftalk/html/office09072000.asp
funktioniert der Code.
Kennt sonst noch wer den Fehler?

danke,
Paul

  

Betrifft: AW: FileSystemObject Frage von: Nepumuk
Geschrieben am: 29.07.2007 02:39:35

Hallo Paul,

weil der Code nur Dateien aufnimmt. Oder siehst du irgendwo eine Zeile in der per Add - Methode ein Ordner aufgenommen wird?

Gruß
Nepumuk


  

Betrifft: AW: FileSystemObject Frage von: Paul
Geschrieben am: 29.07.2007 20:01:03

ähm ja, weiter unten, unter subfolders: *.path
falls dir das noch nicht aufgefallen ist, es werden sowohl dateien als auch ordner in der dirct gespeichert, da brauch ich kein Add. Habe auch selber schon eine Tabelle damit befüllt. (sprich also mit der test sub) und da habe ich nur die ordner angezeigt bekommen, in denen auch files vorhanden waren. ich will aber alle!!!
nun ja soweit kenn ich mich schon noch aus. also bitte nochmals um hilfe und um keine halbherzigen antworten, da die mich nicht weiterbringen. danke
gruß
Paul


  

Betrifft: AW: FileSystemObject Frage von: Horst
Geschrieben am: 29.07.2007 20:20:11

Hi,

für jemand, der Hilfe erwartet, ist dein Ton ganz schön flapsig.

mfg Horst


  

Betrifft: AW: FileSystemObject Frage von: Paul
Geschrieben am: 29.07.2007 20:29:49

sorry,
bin aber ziemlich entnervt. nicht übel nehmen


  

Betrifft: AW: FileSystemObject Frage von: Ramses
Geschrieben am: 29.07.2007 20:57:25

Hallo

"....und um keine halbherzigen antworten..."
Da hast du dich wahrscheinlich um die einzige Chance gebracht dein Problem zu lösen.

Ausserdem solltest du vorsichter sein mit deinen Aussagen, und die Beschreibung auf der MS-Homepage mal etwas genauer lesen

"...It then loops through the Files collection of that folder and adds the path and file name for each file to the Dictionary object...."

Also ich lese das so:
Wo keine Files,... da kein Folder.
Der Code ist nicht entsprechend aufgebaut.

Gruss Rainer


  

Betrifft: AW: FileSystemObject Frage von: Paul
Geschrieben am: 29.07.2007 21:22:01

Mann Leute,
sorry, dass das so forsch klingt, ist aber nicht so gemeint, es ist halt so, dass mich das Problem voll fertig macht. Ich bitte euch, helft mir dabei. Ich tüftle schon seit einiger Zeit daran und ja die Zeile habe ich wohl überlesen. Was wäre da die Rätselslösung?
Ich bin über jeden Vorschlag froh, nur empfinde ich solche Antowrten, wie die vom Nepumuk sehr demotivierend. Auch bei meinem vorherigen Thread.
Sorry nochmal.
Paul


  

Betrifft: AW: FileSystemObject Frage von: Nepumuk
Geschrieben am: 29.07.2007 22:46:39

Hallo Paul,

um einen Eintrag in einem Dictionary - Objekt vorzunemen ist die Add - Methode unerlässlich. Die einzige Zeile in der Funktion in welcher diese Methode angewendet wird ist diese:

dctDict.Add filFile.Path, filFile.Path

Und in dieser Zeile werden nur Dateien hinzugefügt, keine Ordner. Also erzähl mir nichts von Ordnern die du aufgelistet bekommen hast, auf keinen Fall mit diesem Code.

Füge hier diese Zeile ein, dann hast du dein Ordner:


If blnRecursive Then
    For Each fdrSubFolder In fdrFolder.SubFolders
        dctDict.Add fdrSubFolder.Path, fdrSubFolder.Path '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        GetFiles fdrSubFolder.Path, dctDict, True
    Next fdrSubFolder
End If


Gruß
Nepumuk


  

Betrifft: AW: FileSystemObject Frage von: Paul
Geschrieben am: 29.07.2007 23:07:57

@nepumuk: tausend dank
es funzt.
;)
gruss
Paul