es geht nur darum, ob ich das machen kann. Die Monate oder
Jahre sind unwichtig. Ich wollte die objektorientierte
Arbeitsweise auf Excel übertragen.
Aber wie greift man denn mit VBA auf die Sheets zu? Und wie
ermittelt man die Anzahl der Sheets und den Namen?
Hallo asdf,
auf die Schnelle fand ich in meiner Schatztruhe nur diesen professionellen Auflistcode. Teste ihn mal in einer neuen leeren Mappe.
Er macht noch nicht das was du willst, erlistet nur Mappennamen auf. Und ja, er hat noch viele Features, die du scheinbar nicht brauchst, egal die kann man immer noch rauswerfen.
Wie du nach einem test siehst hat man dann alle ;Mappennamen. Nun ist es für mich einleichtes, an der richtigen Stelle im Code einzubauen, daß er auch die jeweilige Mappe öffnet, die Blattnamen oder/und Anzahl ausliest, die mappe schleßt und das Ergebnis irgendwo in Zellen schreibt.
Zum Code, was du machen mußt, du mußt diese Zeile in DateiAuflisten anpassen:
For Each Datei In GetFiles(„C:\test“, False, „*.xls“)
Das erste Argument ist der Ordnername, das zweite ist True oder False, jenachdem ob auch Unterordner des Ordners durchsucht werden sollen. Das dritte Argument gibt die Dateiendung an nach der gesucht wird.
Um den Code zu benutzen.
Alt+F11, Einfügen—Modul, Code reinkopieren, dann unter Extras—Verweise den Verweis anhaken (Microsoft Scripting Runtime), Editor schließen.
Makro Dateilisten ausfhren mit Alt+F8…
Gruß
Reinhard
Option Explicit
' Achtung!
' --\> Microsoft Scripting Runtime - Verweis notwendig!
Sub Dateilisten()
Dim Datei As File, Zei As Long
For Each Datei In GetFiles("C:\test", False, "\*.xls")
Zei = Zei + 1
Cells(Zei, 1) = Datei.Name
Next
End Sub
'
Public Function GetFiles(FolderPath As String, scanSubDirectorys As Boolean, Optional \_
SearchPattern As String, Optional SortBy As String) As Collection
' Die MSR - Objekte
Dim objFs As New FileSystemObject
Dim objRootFolder As Folder
Dim objSubFolder As Folder
Dim objFile As File
' Zwischenspeicher für den Rückgabewert der Funktion
Dim HColl As New Collection
Set HColl = Nothing
' Wenn kein Suchmuster angegeben alle Dateien zurückliefern
If SearchPattern = "" Then SearchPattern = "\*"
' Das Ordner-Objekt für den angegebenen Pfad laden
On Error GoTo err01
Set objRootFolder = objFs.GetFolder(FolderPath)
err01:
If Err.Number 0 Then
Set GetFiles = HColl
Exit Function
End If
' Alle Dateien in diesem Ordner durchlaufen
For Each objFile In objRootFolder.Files
' Wenn das Suchmuster übereinstimmt Datei der Collection hinzufügen
If objFile.Name Like SearchPattern Then
HColl.Add objFile
End If
Next
' Wenn angegeben, die Unterordner des Startpfades durchlaufen
If scanSubDirectorys Then
For Each objSubFolder In objRootFolder.SubFolders
' Alle per Rekursion zurückgelieferten Dateien der Hilfscollection hinzufügen
For Each objFile In GetFiles(objSubFolder.Path, scanSubDirectorys, SearchPattern)
HColl.Add objFile
Next
Next
End If
' Wenn angegeben, die Hilfs-Collection sortieren
If SortBy "" Then
Set HColl = SortItemCollection(HColl, SortBy)
End If
' Rückgabewert
Set GetFiles = HColl
End Function
'
Public Function SortItemCollection(col As Collection, strPropertyName) As Collection
Dim colNew As Collection
Dim objCurrent As Object
Dim objCompare As Object
Dim lngCompareIndex As Long
Dim variantCurrent As Variant
Dim variantCompare As Variant
Dim blnGreaterValueFound As Boolean
'make a copy of the collection, ripping through it one item
'at a time, adding to new collection in right order...
Set colNew = New Collection
For Each objCurrent In col
'get value of current item...
variantCurrent = CallByName(objCurrent, strPropertyName, VbGet)
'setup for compare loop
blnGreaterValueFound = False
lngCompareIndex = 0
For Each objCompare In colNew
lngCompareIndex = lngCompareIndex + 1
variantCompare = CallByName(objCompare, strPropertyName, VbGet)
'die Vergleichstypen auf Variant geändert, somit können beliebige Datentypen \_
miteinander verglichen werden
If variantCurrent