Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1372to1376
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Unterordner per Makrosuche einbinden

Unterordner per Makrosuche einbinden
05.08.2014 07:55:37
Stefan
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

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Unterordner per Makrosuche einbinden
05.08.2014 08:17:04
Oberschlumpf
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

Anzeige
AW: Unterordner per Makrosuche einbinden
05.08.2014 08:51:55
Stefan
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?

AW: Unterordner per Makrosuche einbinden
05.08.2014 09:02:13
Oberschlumpf
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

Anzeige
AW: Unterordner per Makrosuche einbinden
05.08.2014 09:48:45
Stefan
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.

wer anders bitte
05.08.2014 10:34:06
Oberschlumpf
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!

Anzeige
AW: wer anders bitte
05.08.2014 13:12:48
Tino
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

AW: wer anders bitte
06.08.2014 14:22:11
Stefan
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.

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige