Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1548to1552
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

Makro auch in Unterordnern ausführen

Makro auch in Unterordnern ausführen
05.04.2017 12:35:15
Kai
Hallo zusammen,
ich bin der Neue. Meine Excelkenntnisse würde ich als gut bis sehr gut bezeichnen. Mit VBA habe ich zwar schon etwas herumgespielt, bin aber grundsätzlich gesehen noch Neuling. Inzwischen musste ich einsehen dass ein Buch lesen und im Internet suchen nicht ausreicht um VBA zu verstehen, daher werde ich im Mai einen Bildungsurlaub zum Thema Programmieren mit VBA antreten. Da ich mich unter anderem noch an DOS erinnern kann und mich darin auch gut zurecht gefunden habe ist bei mir ein gewisses Verständnis für Programmiersprachen vorhanden.
Jetzt zu meiner Frage:
Ich habe eine ganze Reihe von Dateien, in denen ich jeweils das erste Blatt umbenennen möchte. Mittels Makroaufzeichnung und einer Internetsuche habe ich mir ein funktionierendes Makro zusammengebastelt, das die Aufgabe erfüllt. Das Problem ist, dass ältere Dateien in verschiedenen Unterordnern abgelegt sind, das Makro bis jetzt aber nur im Hauptordner funktioniert. Da die im Netz gefundenen Lösungsansätze recht unterschiedlich sind, bin ich mir nicht sicher, wie ich den Code erweitern muss, um auch die Unterordner zu durchsuchen.
Da ich auch für statistische Auswertungen ein ähnliches Suchmuster benötige, wäre das die Grundlage für weitere Makros.
Wie muss ich folgenden Code ergänzen, um auch Unterordner zu durchsuchen?

Option Explicit
Sub Übersichtumbenennen()
' Übersichtumbenennen Makro
Dim strVerzeichnis As String
Dim StrDatei As String
Dim StrTyp As String
Dim Dateiname As String
strVerzeichnis = "Z:\XXXX_Labor\01 Prüfberichte (ausgefüllt)\"
StrTyp = "*WPK XXXX.xl*"
Dateiname = Dir(strVerzeichnis & StrTyp)
Do While Dateiname  ""
Workbooks.Open Filename:=strVerzeichnis & Dateiname
Sheets(1).Select
Sheets(1).Name = "Datenblatt WPK"
Range("G3").Select
ActiveWorkbook.Close True
Dateiname = Dir
Loop
End Sub
Gruß
Kai

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro auch in Unterordnern ausführen
05.04.2017 12:50:33
Michael
Hallo!
Eine Möglichkeit, teste mal:
Sub UebersichtUmbenennen()
Const BLATT_NAME_NEU$ = "Datenblatt WPK"
Const DATEI_TYP$ = "*WPK XXXX.xl*"
Const HAUPT_VERZEICHNIS$ = "Z:\XXXX_Labor\01 Prüfberichte (ausgefüllt)\"
Dim oDatSys As Object, oOrdner As Object, oSubOrdner As Object
Dim oDatei As Object, Stapel As Collection, Wb As Workbook
Application.ScreenUpdating = False
Set oDatSys = CreateObject("Scripting.FileSystemObject")
Set Stapel = New Collection
Stapel.Add oDatSys.GetFolder(HAUPT_VERZEICHNIS)
Do While Stapel.Count > 0
Set oOrdner = Stapel(1)
Stapel.Remove 1
For Each oSubOrdner In oOrdner.SubFolders
Stapel.Add oSubOrdner
Next oSubOrdner
For Each oDatei In oOrdner.Files
If oDatei.Name Like DATEI_TYP Then
Set Wb = Workbooks.Open(oDatei.Path)
With Wb
.Worksheets(1).Name = BLATT_NAME_NEU: .Close True
End With
End If
Next oDatei
Loop
End Sub
LG
Michael
Anzeige
AW: Makro auch in Unterordnern ausführen
05.04.2017 13:14:55
Kai
Hallo Michael,
läuft perfekt.
Danke
Kai
Super, gerne! LG und owt
05.04.2017 15:21:15
Michael
AW: Makro auch in Unterordnern ausführen
05.04.2017 12:55:41
Rudi
Hallo,
ne andere Möglichkeit:
Sub Umbenennen()
Dim oFolder As Object
Dim strFolder As String
Dim FSO As Object
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Ordner wählen"
.AllowMultiSelect = False
If .Show = -1 Then
strFolder = .SelectedItems(1)
End If
End With
If strFolder = "" Then Exit Sub
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(strFolder)
prcFiles oFolder
prcSubFolders oFolder
End Sub
Sub prcFiles(oFolder)
Dim oFile As Object, wkb As Workbook
For Each oFile In oFolder.Files
If LCase(oFile) Like "*.xls*" Then
Set wkb = Workbooks.Open(oFile)
wkb.Sheets(1).Name = "Test" 'oder was du willst
wkb.Close True
End If
Next
End Sub
Sub prcSubFolders(oFolder)
Dim oSubFolder As Object
For Each oSubFolder In oFolder.SubFolders
prcFiles oSubFolder
prcSubFolders oSubFolder
Next
End Sub

Gruß
Rudi
Anzeige
AW: Makro auch in Unterordnern ausführen
05.04.2017 13:27:59
Kai
Hallo Rudi,
das Makro läuft ohne Fehlermeldung durch, hat aber keinen Effekt auf meine Dateien. Es scheinen auch keine Dateien geöffnet zu werden. Ich werde mir das anschauen, wenn es hier etwas ruhiger ist und Dir auf jeden Fall Rückmeldung geben.
Gruß
Kai
getestet und geht. owT
05.04.2017 14:04:33
Rudi
AW: getestet und geht. owT
05.04.2017 16:29:21
Kai
Hallo Rudi,
jetzt habe ich das Makro ausgiebig getestet. Schreibfehler meinerseits kann ich jetzt auch ausschließen. Nach Start des Makros kann ich den Ordner auswählen, danach scheint Excel für ca. 10s eine Aktion auszuführen. Dann ist Schluss. Keine Fehlermeldung, aber auch keine umbenannten Sheets.
Es sind 85 Dateien zu öffnen, das dauert hier ein bis zwei Minuten (Terminal). Meine Vermutung ist, dass die Ordner durchsucht aber keine Dateien geöffnet werden. Gehe ich in einen übergeordneten Ordner, dauert die Aktion länger.
Es handelt sich hier um ein Verzeichnis in einem Netzlaufwerk, aber das sollte ja kein Problem sein, da ich den Ordner auswähle.
Gruß
Kai
Anzeige
AW: getestet und geht. owT
05.04.2017 21:02:57
Rudi
Hallo,
bist du den Code mal mit F8 durchgegangen?
Gruß
Rudi
AW: getestet und geht. owT
06.04.2017 10:54:45
Kai
Hallo Rudi,
jetzt ja. Wie sagt meine Frau immer: Das war viel zu einfach...
Der fett markierte Teil wird übersprungen:
Option Explicit
Sub WPKumbenennen2()
Dim oFolder As Object
Dim strFolder As String
Dim FSO As Object
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Ordner wählen"
.AllowMultiSelect = False
If .Show = -1 Then
strFolder = .SelectedItems(1)
End If
End With
If strFolder = "" Then Exit Sub
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(strFolder)
prcFiles oFolder
prcSubFolders oFolder
End Sub
Sub prcFiles(oFolder)
Dim oFile As Object, wkb As Workbook
For Each oFile In oFolder.Files
If LCase(oFile) Like "*WPK B*.xl*" Then
Set wkb = Workbooks.Open(oFile)
wkb.Sheets(1).Name = "Daten WPK" 'oder was du willst
wkb.Close True
    End If
Next
End Sub
Sub prcSubFolders(oFolder)
Dim oSubFolder As Object
For Each oSubFolder In oFolder.SubFolders
prcFiles oSubFolder
prcSubFolders oSubFolder
Next
End Sub
Ansonsten läuft die Schleife einwandfrei durch.
Gruß
Kai
Anzeige
AW: getestet und geht. owT
06.04.2017 10:57:03
Kai
Nur fett markiert ist es wohl nicht so gut zu erkennen. Das ist der übersprungene Teil:
      Set wkb = Workbooks.Open(oFile)
wkb.Sheets(1).Name = "Daten WPK" 'oder was du willst
wkb.Close True
Also das Öffnen der Dateien.
AW: getestet und geht. owT
06.04.2017 21:55:34
Rudi
Hallo,
muss komplett klein geschrieben werde. LCase!!!
     If LCase(oFile) Like "*wpk b*.xl*" Then

Gruß
Rudi
AW: getestet und geht. owT
07.04.2017 13:26:36
Kai
Hallo Rudi,
"muss komplett klein geschrieben werde. LCase!!!"
da hast Du recht, jetzt läuft es. Das wusste ich nicht.
Vielen Dank für den Lösungsansatz, daraus lässt sich für meine Zwecke noch einiges machen.
Gruß
Kai
Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige