AW: vba FoundFiles differenzieren
27.11.2004 09:27:01
andre
Hallo Georg,
hier mal ein Beispiel, wie Du damit umgehen kannst. Noch ein Hinweis zur Variablendeklaration. Du solltest die Typen mit angeben, muss meist nicht sein, ist aber für den Speicherbedarf und die Typkontrolle von Vorteil.
Sub test2()
Dim i%, x%, y%, z%
Dim a As Object
Dim liste1(), liste2(), liste3()
'liste1 erzeugen
With Application.FileSearch
.Filename = "*.xls"
.LookIn = "C:\tmp\"
.Execute
'liste1 = Array(.FoundFiles) geht hier nicht
'Array wird beim nächsten .FoundFiles zurückgesetzt!
'das ist auch die Ursache für Dein Problem im Original
ReDim liste1(1 To .FoundFiles.Count)
For i = 1 To .FoundFiles.Count
liste1(i) = .FoundFiles.Item(i)
Next
End With
'liste2 erzeugen
With Application.FileSearch
.Filename = "*.xls"
.LookIn = "C:\temp\"
.Execute
'liste2 = Array(.FoundFiles) würde hier gehen
'ebenso gleich .FoundFiles
'weil kein erneutes .FoundFiles kommt aber
'Array wird dann von liste2(0) an gefüllt und nicht
'ab liste2(1) außerdem schaue mal in die Überwachung
'und vergleiche liste3 mit liste2
ReDim liste2(1 To .FoundFiles.Count)
For i = 1 To .FoundFiles.Count
liste2(i) = .FoundFiles.Item(i)
Next
'liste3 erzeugen
liste3 = Array(.FoundFiles)
'End With ganz unten
'For mal einzeln abgearbeitet, geht aber auch verschachtelt
For i = 1 To UBound(liste1)
MsgBox "liste1(" & i & "): " & liste1(i)
Next i
For x = 1 To UBound(liste2)
MsgBox "liste2(" & x & "): " & liste2(x)
Next x
Set a = liste3(0)
For y = 1 To a.Count
MsgBox "liste3(" & y & "): " & a.Item(y)
Next y
For z = 1 To .FoundFiles.Count
MsgBox "FondFiles(" & z & "): " & .FoundFiles.Item(z)
Next z
End With
End Sub