MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 20.10.2017, 09:57   #1
Theo76
Neuer Benutzer
Neuer Benutzer
Standard VBA - Alle Unterordner eines Verzeichnisses durchsuchen

Moin zusammen!

Ich hoffe, ihr könnt mir bei folgendem Problem helfen: ich will in meinem Programm abhängig von einer User-Abfrage von verschiedenen Start-Verzeichnissen ausgehen und in diesen Start-Verzeichnissen alle Dateien in allen Unterordnern durchsuchen und sie bearbeiten. Gleichzeitig müssen auch die Dateien gezählt werden (dies wird für die Berechnung eines Mittelwerts gebraucht).
In meinem Programm besteht jetzt das Problem, dass nur die erste Ebene an Unterordnern durchsucht wird, aber nicht die "Unter-Unterordner". Die reale Ordnerstruktur kann so aussehen (Datei- und Ordnernamen sind nicht die realen Namen):

"...Gesamt/Einzel/KB/F-1/P-1/Datei_P1_1...P1_n.xlx"
"...Gesamt/Einzel/KB/F-1/P-2/Datei_P2_1...P2_n.xlx"


Gesamt ist mein Hauptordner, darunter liegen mehrere Einzel-Ordner und in jedem Einzelordner nochmal diverse andere Ordner.
Der Nutzer soll dabei beispielsweise Gesamt oder Einzel oder KB oder F-1 oder P-1 oder P-2 als Startverzeichnis auswählen können, um jeweils eine größere oder kleinere Anzahl an Dateien zu benutzen. (Die Auswahl über die UserForm habe ich im Code bewusst gekürzt dargestellt.)

Hier der Code:

Code:

'function to store the relevant data in different arrays
Private Function GetData()
    
    Dim n As Integer
    Dim iter1 As Integer
    Dim iter2 As Integer
    Dim iter3 As Integer
    Dim iter4 As Integer
    Dim iter5 As Integer
    
    Dim wb As Workbook
    Dim myPath As String
    
    Dim objFSO As Object
    Dim objFolder As Object
    Dim objSubFolder As Object
    Dim objSubSubFolder As Object
    Dim objFile As Object

    
    Application.ScreenUpdating = False
    
    'set filepaths due to checkboxes from UserForm1
   'If checkboxVal(1) = True Then
         myPath = "P:/.../KB/"  'Schrägstrich bewusst umgedreht, da die anderen hier im Forum wohl nicht angezeigt werden können
   'End If
    
    'set counted files to zero
    countedFiles = 0
    
    'set FileSystemObject and path
     Set objFSO = CreateObject("Scripting.FileSystemObject")
     Set objFolder = objFSO.GetFolder(myPath)
    
    
    'loop through all Subfolders in selected folder path
   For Each objSubFolder In objFolder.SubFolders   'HIER WIRD NUR 1 EBENE AN UNTERORDNERN DURCHSUCHT (NICHT: ORDNER - UNTERORDNER - UNTERORDNER)
       For Each objFile In objSubFolder.Files
           Set wb = Workbooks.Open(objFile)
           
                   'choose Worksheet "Selbsteinschätzungsbogen" and get all values from each theme
                    With wb.Worksheets("Selbsteinschätzungsbogen")
                    
                            Application.ScreenUpdating = False
                               For iter1 = 0 To 7
                                  valArray1(iter1) = valArray1(iter1) + .Cells(16 + (iter1 * 7), 16).Value 'Themenfeld 1 ab Zeile 16
                               Next iter1
                                                
                               For iter2 = 0 To 5
                                   valArray2(iter2) = valArray2(iter2) + .Cells(73 + (iter2 * 7), 16).Value 'Themenfeld 2 ab Zeile 73
                               Next iter2
                                                
                               For iter3 = 0 To 6
                                   valArray3(iter3) = valArray3(iter3) + .Cells(116 + (iter3 * 7), 16).Value 'Themenfeld 3 ab Zeile 116
                               Next iter3
                                                
                               For iter4 = 0 To 3
                                   valArray4(iter4) = valArray4(iter4) + .Cells(166 + (iter4 * 7), 16).Value 'Themenfeld 4 ab Zeile 166
                               Next iter4
                                                
                               For iter5 = 0 To 3
                                   valArray5(iter5) = valArray5(iter5) + .Cells(195 + (iter5 * 7), 16).Value 'Themenfeld 5 ab Zeile 195
                               Next iter5
                                                
                     End With
                     'after getting all values the workbook has to be closed
                     'addition: "wb.Saved = True" in order to prevent Save Dialog to be opened everytime
                     wb.Saved = True
                     wb.Close
                     
                     'count files for  computing arithmetic average
                     countedFiles = countedFiles + 1
         Next objFile
     Next objSubFolder

     MsgBox ("Der Pfad ist: " & myPath)  'Zum Testen
     MsgBox ("Anzahl der Files: " & countedFiles)  'Zum Testen
     


End Function

Meine Frage: Gibt es eine Möglichkeit, alle Ebenen des Start-Verzeichnisses zu durchsuchen und wenn ja, wie könnte diese aussehen?

Vielen Dank und viele Grüße,
Theo
Theo76 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.10.2017, 10:19   #2
Fennek11
MOF User
MOF User
Standard

Hallo,

ja,es gibt eine "einfache" Variante. Diese bassiert auf dem alten DOS-Befehl

PHP-Code:

dir /*.xlsx c:tempMeineListe.txt 
Mit dem Supercode von snb geht dies direkt in vba.

(siehe snb-vba.eu im Bereich "Füllen einer Kombobox")

mfg
Fennek11 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.10.2017, 13:49   #3
Storax
MOF Profi
MOF Profi
Standard

Code:

Sub GetFiles(StartFolder As String, Pattern As String, _
             DoSubfolders As Boolean, ByRef colFiles As Collection)

Dim f As String, sf As String, subF As New Collection, s

    If Right(StartFolder, 1) <> "" Then StartFolder = StartFolder & ""

    f = Dir(StartFolder & Pattern)
    Do While Len(f) > 0
        colFiles.Add StartFolder & f
        f = Dir()
    Loop

    sf = Dir(StartFolder, vbDirectory)
    Do While Len(sf) > 0
        If sf <> "." And sf <> ".." Then
            If (GetAttr(StartFolder & sf) And vbDirectory) <> 0 Then
                subF.Add StartFolder & sf
            End If
        End If
        sf = Dir()
    Loop

    For Each s In subF
        GetFiles CStr(s), Pattern, True, colFiles
    Next s

End Sub

__________________

This isn't a code writing service, you need to do some research and have a go at writing some of your own code.
Be careful, content may contain traces of irony.
Storax ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.10.2017, 14:13   #4
Theo76
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo ihr beiden,

Vielen Dank für die Lösungsmöglichkeiten!!

Ich habe in der Zwischenzeit eine andere Lösung gefunden und diese bei mir eingebaut.
Falls jemanden diese weitere Lösung interessiert: http://www.xl-central.com/list-the-f...ubfolders.html.

Was mich noch interessieren würde: Geht der Weg über DIR schneller als das Arbeiten mit FSO?
Theo76 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.10.2017, 19:07   #5
Storax
MOF Profi
MOF Profi
Standard

Die Lösung aus dem Link ist "lahm", weil die direkt ins Blatt schreibt und dabei nicht mal das Screenupdating abgeschaltet hat.

Hier etwas zu Deiner Frage, und hier

Aber evtl. ist das ja was für Dich

__________________

This isn't a code writing service, you need to do some research and have a go at writing some of your own code.
Be careful, content may contain traces of irony.

Geändert von Storax (20.10.2017 um 19:13 Uhr).
Storax ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.10.2017, 08:40   #6
Storax
MOF Profi
MOF Profi
Standard

PS Habe nicht daran gedacht, dass Links zum "Nachbarforum" blockiert werden, also hier neuer Versuch

__________________

This isn't a code writing service, you need to do some research and have a go at writing some of your own code.
Be careful, content may contain traces of irony.
Storax ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.10.2017, 15:17   #7
Theo76
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hey, danke für die Links!

Musste mich erstmal um das "Vorgeplänkel" in der Programmierung kümmern, also die Auswahl der Pfade aus der UserForm etc.

Ich werde mal überprüfen, wie ich mein Programm von FSO auf die Nutzung der DIR-Funktion umschreiben kann.

Ich meld mich dann nochmal.
Theo76 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.