Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Unterordner per Makrosuche einbinden

Betrifft: Unterordner per Makrosuche einbinden von: Stefan
Geschrieben am: 05.08.2014 07:55:37

Hallo geehrte Excel Gemeinde!

Derzeitig beschäftige ich mich mit folgendem Problem, bei dem ich kurz eure Hilfe bräuchte.

Ich möchte per Makro, Dateien in einem Ordner bzw. in dessen Unterordnern einmal öffnen, aktualisieren und anschließend wieder schließen lassen.

Für die folgende Struktur habe ich beireits ein passendes und funktionierendes Makro gefunden:

Suchordner der in der Pfadangabe angegeben wird--> 12 Unterordner in denen jeweils 2 Excel Dateien liegen:

Sub test5()

    Const sSourcePath As String = "C:...Pfadangabe"
        
    '
    Dim fld, file
    Dim fso As Object
    Dim objFld As Object
    Dim objSubFld As Object
  
    Dim objFiles As Object
    
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set objFld = fso.GetFolder(sSourcePath)
    Set objSubFld = objFld.SubFolders

        
    For Each fld In objSubFld
        Set objFiles = fld.Files
            For Each file In objFiles
            Application.Workbooks.Open (file.Path)
            ActiveWorkbook.Close savechanges:=True
        
        Next
        
    Next

End Sub 





Wie muss ich jetzt dieses Makro ändern, wenn in den Unterordnern eine weitere
Untergliederung in Ordner vorkommt? 

Also Quasi: Suchordner der in der Pfadangabe angegeben wird -> 12 Unterordner -> wieder 10-12  _
Unterordner in denen nun die Excel Dateien liegen.

Hoffe ich konnte mein Problem halbwegs verständlich Beschreiben. 

Vielen Dank schon einmal im Voraus! 

Grüße
Stefan


  

Betrifft: AW: Unterordner per Makrosuche einbinden von: Oberschlumpf
Geschrieben am: 05.08.2014 08:17:04

Hi Stefan

versuch es hiermit

Sub sbStart()
    
    sbGetFiles "hier dein Startpfad, z Bsp C:\data"
    
End Sub

Private Sub sbGetFiles(ByVal strDirectory As String)
    
    Dim objFolder  As Object, objFSO As Object, objFile As Object
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(strDirectory)
    
        For Each objFile In objFolder.Files
            If InStr(Right(LCase(objFile.Path), 4), "xls") > 0 Then
                'ab hier beginnt dein Code,wenn ne xl-Datei gefunden wird
                Workbooks.Open objFile.Path
                ActiveWorkbook.Close False
            End If
        Next
        
        For Each objFolder In objFolder.SubFolders
            sbGetFiles objFolder.Path
        Next

End Sub

Du benötigst also zwei Subs. Eine Start-Sub, die dann den Datei-finden-Prozess durchführt.

Hilfts?

Ciao
Thorsten


  

Betrifft: AW: Unterordner per Makrosuche einbinden von: Stefan
Geschrieben am: 05.08.2014 08:51:55

Danke!
@Thorsten, habe dein Makro nun einmal ausprobiert. Funktioniert auch weitestgehend. Habe jedoch grade noch das Problem, dass nach kurzer Zeit der Laufzeitfehler 400 angezeigt wird.
Da die Dateien alle auf einem Server liegen und mehrer Personen auf diese Daten zugreifen können, denke ich, dass eine der Exclel-Files gerade anderswo geöffnet ist und ich diese somit nicht einfach öffnen bzw. aktualisieren kann. Ist das eine Möglichkeit des Fehlers?


  

Betrifft: AW: Unterordner per Makrosuche einbinden von: Oberschlumpf
Geschrieben am: 05.08.2014 09:02:13

Hi Stefan

da du leider nur die Err-Nr aber nich den Err-Text nennst, musste ich erst mal googeln.
Sonst kenn ich alle Fehlernummern mit ihren Texten auswendig...nur Dienstags klappt das nich....tztz

gefunden in diesem Link
https://www.herber.de/forum/archiv/1024to1028/1026944_Laufzeitfehler_400.html

hab ich den Text:
Laufzeitfehler 400
"Formular wird bereits angezeigt und kann daher nicht gebunden dargestellt werden.

Das hat aber nix mit ner schon geöffneten Datei zu tun, sondern damit, dass dein Code ein Userform schon angezeigt hat, welches der Code vor dem Schließen des Userforms noch mal anzeigen will.
Das geht nicht, deswegen Fehler 400

Unabhängig davon könnte es trotzdem zu dem von dir beschriebenen Fehler kommen.
Da du aber in deinem Erstbeitrag nix zum Thema Server usw geschrieben hast, bin ich natürlich davon ausgegangen, dass die Dateien nur lokal behandelt werden.

Ne Idee, den Fehler mit schon geöffneten Dateien abzufangen, hab ich im Mom leider nicht.

Ciao
Thorsten


  

Betrifft: AW: Unterordner per Makrosuche einbinden von: Stefan
Geschrieben am: 05.08.2014 09:48:45

Sorry. Mehr als ein großes rotes X und eine 400 wurde bei mir aber leider auch nicht angezeigt :-)
Habe gerade noch einmal nachgeschaut, alle Dateien sind geschlossen...der Fehler tritt jedoch trotzdem auf.
Nach genauerer Betrachtung ist mir grad aufgefallen, dass der Fehler nach dem schließen der letzten Datei im ersten Unterordner auftritt. D.h. die Routine springt quasi nicht wieder zurück zum angegebenen Suchpfad.


  

Betrifft: wer anders bitte von: Oberschlumpf
Geschrieben am: 05.08.2014 10:34:06

Tja, das is doof...wenn nur die Err-Nr gezeigt wird :-)
Ich kann leider nicht mehr helfen, weil ich 5 Wochen außer Haus bin + nochpacken muss, etc.
Viel Erfolg!


  

Betrifft: AW: wer anders bitte von: Tino
Geschrieben am: 05.08.2014 13:12:48

Hallo,
evtl. werden Eventmakros beim Öffnen ausgeführt die einen weiteren Ablauf des Codes verhindern.

Versuch mal und stell die Behandlung von Eventmakos ab.

Application.EnableEvents = False

'Dein Code
'***
'***

Application.EnableEvents = True
Sollte es zum Fehler kommen werden diese nicht automatisch wieder aktiviert.
Dann im VBA im Direktfenster Application.EnableEvents = True eingeben und
mit Enter-Taste abschließen.
Oder Excel komplett neu starten.

Gruß Tino


  

Betrifft: AW: wer anders bitte von: Stefan
Geschrieben am: 06.08.2014 14:22:11

Vielen Dank!
Hab es getestet. An den Eventmakros lag es leider auch nicht. Die Fehlermeldung hat sich nun auf den Fehler "1004 - Anwendung oder objektdefinierter Fehler" geändert (mehr steht leider auch diesmal nicht da). Ich denke der Fehler kommt irgendwo aus dem Suchablauf des Makros. Die Erste Ordnerstruktur inkl. Unterordner und Unterunterordner wird tadellos duchsucht, sobald die Schleife jedoch wieder von vorn beim nächsten Unterordner beginnen soll, kommt der Fehler.


  

Betrifft: AW: Unterordner per Makrosuche einbinden von: Hajo_Zi
Geschrieben am: 05.08.2014 08:18:24

Hallo Stefan,

siehe dir das Beispiel an.
http://hajo-excel.de/chCounter3/getfile.php?id=21

GrußformelHomepage


 

Beiträge aus den Excel-Beispielen zum Thema "Unterordner per Makrosuche einbinden"