Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dateien in Ordner öffnen,Makro ausführen,speichern

Forumthread: Dateien in Ordner öffnen,Makro ausführen,speichern

Dateien in Ordner öffnen,Makro ausführen,speichern
07.09.2015 11:00:50
braun
Guten Tag,
ich bin seit Tagen auf der Suche nach einem Makro, werde aber einfach nicht fündig.
In einem Ordner befinden sich viele Excel-Dateien, die alle die gleiche Struktur haben.
Ich öffne nun jede Datei einzeln, kopiere den Inhalt in die Exceldatei mit meinem Makro, lasse das Makro laufen und speicher es wieder unter dem alten Namen in dem Ordner ab.
Das Makro läuft super, allerdings ist das alles sehr aufwendig, da in dem Ordner sehr viele Dateien sind.
Ich bräuchte nun ein Makro, dass alle Dateien in dem Ordner nacheinander öffnet, das Makro darüber laufen lässt, und anschließend überspeichert.
Habe in verschiedenen Foren schon Codes gefunden, allerdings kann man dort nur einen Code eingeben,das Makro dass ich erstellt habe ,besteht aber aus vier Teilen und wird über Call-Funktionen abgerufen.
Wäre super wenn mir jemand helfen kann!
Vielen Dank im Voraus
karin

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Dateien in Ordner öffnen,Makro ausführen
07.09.2015 12:26:46
Rudi
Hallo,
allerdings kann man dort nur einen Code eingeben
na und?
Dann gib eben alle 4 an.
Keiner weiß, was du gefunden hast und wie deine Makros aussehen.
Gruß
Rudi

AW: Dateien in Ordner öffnen,Makro ausführen
07.09.2015 13:02:16
braun
Den Code finde ich leider nicht mehr, aber er hat auch nicht funktioniert, auch nicht, wenn ich alle Makrocodes mit einbette. Hatte gehofft es gibt vielleicht die Möglichkeit, meine geschriebenen Makros so stehen zu lassen, und in dem neuen MakroCode per Call Funktion diese aufzurufen.
Hier sind meine 4 Makros (stark verkürzt und abgeändert) für einen groben Überblick

Private Sub Makro1()
'Tabelle aufbereiten
'Spalten löschen
Range("A:A,C:C,E:E,BF:DC").Delete
'neue Spalten einfügen
Columns("G:G").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("H2").Select
ActiveCell.FormulaR1C1 = "AAAA"
Range("H1").Select
ActiveCell.FormulaR1C1 = "BBB"
Range("G2").Select
ActiveCell.FormulaR1C1 = "CCC"
Range("G1").Select
ActiveCell.FormulaR1C1 = "DDD"
'Formel:Datumsformat ändern
Range("G3").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR((DATE(LEFT(RC[2],4),MID(RC[2],5,2),RIGHT(RC[2],2)))),""ohne Datum"",DATE(LEFT( _
RC[2],4),MID(RC[2],5,2),RIGHT(RC[2],2)))"
With ActiveSheet
'letzte Zeile auffinden:
lngLetzte = .UsedRange.Rows.Count + .UsedRange.Row - 1
'Formel aus G3 runterziehen
.Range(.Cells(3, 7), Cells(lngLetzte, 7)).Formula = .Cells(3, 7).Formula
End With
Range("H3").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR((DATE(LEFT(RC[-2],4),MID(RC[-2],5,2),RIGHT(RC[-2],2)))),""ohne Datum"", _
DATE(LEFT(RC[-2],4),MID(RC[-2],5,2),RIGHT(RC[-2],2)))"
With ActiveSheet
'letzte Zeile auffinden:
lngLetzte = .UsedRange.Rows.Count + .UsedRange.Row - 1
'Formel aus H3 runterziehen
.Range(.Cells(3, 8), Cells(lngLetzte, 8)).Formula = .Cells(3, 8).Formula
End With
Columns("G:H").Select
Selection.NumberFormat = "m/d/yyyy"
End Sub
Private Sub Makro2()
Columns("H:H").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("H1").Select
ActiveCell.FormulaR1C1 = "BBBBBBBBB"
Range("H2").Select
ActiveCell.FormulaR1C1 = "BBBBBBBBB"
End Sub
Private Sub Makro3()
Range("H3").Select
ActiveCell.FormulaR1C1 = "=IF(ISERROR(IF(RC[1]="""",99,NETWORKDAYS(RC[-1],RC[1]))-1),"""", _
IF(RC[1]="""",99,NETWORKDAYS(RC[-1],RC[1]))-1)"
Columns("H:H").Select
Selection.NumberFormat = "0"
With ActiveSheet
'letzte Zeile auffinden:
lngLetzte = .UsedRange.Rows.Count + .UsedRange.Row - 1
'Formel aus H3 runterziehen
.Range(.Cells(3, 8), Cells(lngLetzte, 8)).Formula = .Cells(3, 8).Formula
End With
Rows("1:1").Select
Selection.Delete Shift:=xlUp
'Filter einbauen
Rows("1:1").Select
Application.CutCopyMode = False
Selection.AutoFilter
'Spaltengröße anpassen
Columns("A:P").EntireColumn.AutoFit
End Sub
Private Sub Makro4()
Sheets(1).Select
Sheets.Add After:=Sheets(1)
Sheets(2).Name = "ABC"
Sheets(1).Select
Rows("1:2").Select
Selection.Copy
Sheets(2).Select
Range("A1").Select
ActiveSheet.Paste
Sheets(1).Select
startzeile = 2
'Spalte die geprüft wird
Spalte = 5
grenzwert = 5
startzeile2 = 2
Spalte2 = 10
Spalte3 = 1
grenzwert2 = "TEST"
grenzwert3 = "TEST2"
Sheets(1).Select
Letzte_Zeile = Range(Cells(65536, Spalte), Cells(65536, Spalte)).End(xlUp).Row
For i = startzeile To Letzte_Zeile
On Error Resume Next
If Sheets(1).Cells(i, Spalte) > grenzwert And Sheets(1).Cells(i, Spalte2) = grenzwert2 And  _
Sheets(1).Cells(i, Spalte3) = grenzwert3 Then
'hier copieren der Zellinhalte
Sheets(1).Rows(i & ":" & i).Copy
Sheets(2).Select
Cells(startzeile2, 1).Select
ActiveSheet.Paste
startzeile2 = startzeile2 + 1
Else
End If
Next
'Filter einbauen
Rows("1:1").Select
Application.CutCopyMode = False
Selection.AutoFilter
'Überschriften fixieren
Range("A2").Activate
ActiveWindow.FreezePanes = True
'Spaltengröße anpassen
Columns("A:W").EntireColumn.AutoFit
End Sub
pre>

Anzeige
AW: Dateien in Ordner öffnen,Makro ausführen
07.09.2015 13:05:35
braun
Da ist jetzt was schief gelaufen, hier nochmal der ganze Code
Private Sub Makro1()
'Tabelle aufbereiten
'Spalten löschen
Range("A:A,C:C,E:E,BF:DC").Delete
'neue Spalten einfügen
Columns("G:G").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("H2").Select
ActiveCell.FormulaR1C1 = "AAAA"
Range("H1").Select
ActiveCell.FormulaR1C1 = "BBB"
Range("G2").Select
ActiveCell.FormulaR1C1 = "CCC"
Range("G1").Select
ActiveCell.FormulaR1C1 = "DDD"
'Formel:Datumsformat ändern
Range("G3").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR((DATE(LEFT(RC[2],4),MID(RC[2],5,2),RIGHT(RC[2],2)))),""ohne Datum"",DATE(LEFT( _
RC[2],4),MID(RC[2],5,2),RIGHT(RC[2],2)))"
With ActiveSheet
'letzte Zeile auffinden:
lngLetzte = .UsedRange.Rows.Count + .UsedRange.Row - 1
'Formel aus G3 runterziehen
.Range(.Cells(3, 7), Cells(lngLetzte, 7)).Formula = .Cells(3, 7).Formula
End With
Range("H3").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR((DATE(LEFT(RC[-2],4),MID(RC[-2],5,2),RIGHT(RC[-2],2)))),""ohne Datum"", _
DATE(LEFT(RC[-2],4),MID(RC[-2],5,2),RIGHT(RC[-2],2)))"
With ActiveSheet
'letzte Zeile auffinden:
lngLetzte = .UsedRange.Rows.Count + .UsedRange.Row - 1
'Formel aus H3 runterziehen
.Range(.Cells(3, 8), Cells(lngLetzte, 8)).Formula = .Cells(3, 8).Formula
End With
Columns("G:H").Select
Selection.NumberFormat = "m/d/yyyy"
End Sub

Private Sub Makro2()
Columns("H:H").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("H1").Select
ActiveCell.FormulaR1C1 = "BBBBBBBBB"
Range("H2").Select
ActiveCell.FormulaR1C1 = "BBBBBBBBB"
End Sub
Private Sub Makro3()
Range("H3").Select
ActiveCell.FormulaR1C1 = "=IF(ISERROR(IF(RC[1]="""",99,NETWORKDAYS(RC[-1],RC[1]))-1),"""", _
IF(RC[1]="""",99,NETWORKDAYS(RC[-1],RC[1]))-1)"
Columns("H:H").Select
Selection.NumberFormat = "0"
With ActiveSheet
'letzte Zeile auffinden:
lngLetzte = .UsedRange.Rows.Count + .UsedRange.Row - 1
'Formel aus H3 runterziehen
.Range(.Cells(3, 8), Cells(lngLetzte, 8)).Formula = .Cells(3, 8).Formula
End With
Rows("1:1").Select
Selection.Delete Shift:=xlUp
'Filter einbauen
Rows("1:1").Select
Application.CutCopyMode = False
Selection.AutoFilter
'Spaltengröße anpassen
Columns("A:P").EntireColumn.AutoFit
End Sub
Private Sub Makro4()
Sheets(1).Select
Sheets.Add After:=Sheets(1)
Sheets(2).Name = "ABC"
Sheets(1).Select
Rows("1:2").Select
Selection.Copy
Sheets(2).Select
Range("A1").Select
ActiveSheet.Paste
Sheets(1).Select
startzeile = 2
'Spalte die geprüft wird
Spalte = 5
grenzwert = 5
startzeile2 = 2
Spalte2 = 10
Spalte3 = 1
grenzwert2 = "TEST"
grenzwert3 = "TEST2"
Sheets(1).Select
Letzte_Zeile = Range(Cells(65536, Spalte), Cells(65536, Spalte)).End(xlUp).Row
For i = startzeile To Letzte_Zeile
On Error Resume Next
If Sheets(1).Cells(i, Spalte) > grenzwert And Sheets(1).Cells(i, Spalte2) = grenzwert2 And  _
Sheets(1).Cells(i, Spalte3) = grenzwert3 Then
'hier copieren der Zellinhalte
Sheets(1).Rows(i & ":" & i).Copy
Sheets(2).Select
Cells(startzeile2, 1).Select
ActiveSheet.Paste
startzeile2 = startzeile2 + 1
Else
End If
Next
'Filter einbauen
Rows("1:1").Select
Application.CutCopyMode = False
Selection.AutoFilter
'Überschriften fixieren
Range("A2").Activate
ActiveWindow.FreezePanes = True
'Spaltengröße anpassen
Columns("A:W").EntireColumn.AutoFit
End Sub

Anzeige
AW: Dateien in Ordner öffnen,Makro ausführen
07.09.2015 13:12:20
Rudi
hallo,
sollte doch so funktionieren:
Sub alle()
Dim sFile As String, wkb As Workbook
Const sPfad As String = "c:\test\"
sFile = Dir(sPfad & "*.xls*")
Do While sFile  ""
Set wkb = Workbooks.Open(sPfad & sFile)
Call Makro1
Call Makro2
Call Makro3
Call Makro4
wkb.Close True
sFile = Dir
Loop
End Sub

Gruß
Rudi

Anzeige
AW: Dateien in Ordner öffnen,Makro ausführen
07.09.2015 15:46:14
braun
Das klappt super, danke!

dann zu...oT
08.09.2015 10:01:44
robert
;
Anzeige
Anzeige

Infobox / Tutorial

Dateien in Ordner öffnen und Makros ausführen


Schritt-für-Schritt-Anleitung

Um alle Excel-Dateien in einem Ordner zu öffnen und ein Makro auszuführen, kannst Du das folgende VBA-Skript verwenden. Achte darauf, dass Du den Pfad zu Deinem Ordner anpasst:

Sub alle()
    Dim sFile As String, wkb As Workbook
    Const sPfad As String = "c:\test\"
    sFile = Dir(sPfad & "*.xls*")
    Do While sFile <> ""
        Set wkb = Workbooks.Open(sPfad & sFile)
        Call Makro1
        Call Makro2
        Call Makro3
        Call Makro4
        wkb.Close True
        sFile = Dir
    Loop
End Sub
  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul über Einfügen > Modul.
  3. Füge den obigen Code in das Modul ein.
  4. Stelle sicher, dass Deine Makros (Makro1, Makro2, Makro3, Makro4) ebenfalls im selben Modul oder einem anderen Modul vorhanden sind.
  5. Passe den Pfad c:\test\ an Deinen Zielordner an.
  6. Führe das Skript aus, um alle Dateien im Ordner zu öffnen, die Makros auszuführen und sie zu speichern.

Häufige Fehler und Lösungen

  • Fehler: „Datei nicht gefunden“
    Lösung: Überprüfe den angegebenen Pfad und stelle sicher, dass die Dateien mit der Endung .xls, .xlsx oder .xlsm im Ordner vorhanden sind.

  • Fehler: „Makro nicht definiert“
    Lösung: Stelle sicher, dass die Makros, die Du aufrufen möchtest, im gleichen Modul oder in einem anderen Modul verfügbar sind.

  • Fehler: „Fehler beim Schließen der Datei“
    Lösung: Überprüfe, ob Excel möglicherweise beim Schließen der Datei nach dem Speichern nach einer Bestätigung fragt. Dies kann durch das Setzen von True im wkb.Close True umgangen werden.


Alternative Methoden

Falls Du keine VBA-Makros verwenden möchtest, kannst Du auch die Power Query-Funktion in Excel nutzen, um Daten aus mehreren Excel-Dateien zusammenzuführen. Diese Methode ist jedoch nicht so flexibel wie das VBA-Skript.

  1. Gehe zu Daten > Abrufen und Transformieren > Aus Datei > Aus Ordner.
  2. Wähle Deinen Ordner aus und lade die Daten.
  3. Du kannst dann die Daten nach Bedarf transformieren und laden.

Praktische Beispiele

Hier sind einige Beispiele, wie die Makros strukturiert sind:

  • Makro1: Bereitet die Tabelle vor, löscht bestimmte Spalten und fügt neue Spalten hinzu.
  • Makro2: Fügt neue Werte in bestimmte Zellen ein.
  • Makro3: Berechnet Arbeits- und Datumswerte und formatiert sie korrekt.
  • Makro4: Kopiert bestimmte Zeilen in ein neues Tabellenblatt basierend auf Bedingungen.

Die Anpassung dieser Makros an Deine spezifischen Bedürfnisse kann den Prozess der ddd dateien öffnen erheblich vereinfachen.


Tipps für Profis

  • Verwende Option Explicit am Anfang Deines VBA-Moduls, um sicherzustellen, dass alle Variablen deklariert sind.
  • Kommentiere Deinen Code ausführlich, damit Du und andere Benutzer die Funktionsweise später verstehen können.
  • Teste Deine Makros an einer kleinen Anzahl von Dateien, bevor Du sie auf den gesamten Ordner anwendest.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um nur spezifische Dateien zu öffnen?
Du kannst die Dir-Funktion anpassen, um nur Dateien mit bestimmten Namen oder Mustern zu öffnen, z.B. sFile = Dir(sPfad & "specific_pattern*.xls*").

2. Kann ich das Makro auch für andere Dateitypen verwenden?
Ja, Du kannst den Dateityp in der Dir-Funktion anpassen, um andere Formate wie .csv oder .txt zu importieren, jedoch muss der Importprozess entsprechend angepasst werden.

3. Wie kann ich sicherstellen, dass meine Makros sicher sind?
Aktiviere die Makrosicherheitseinstellungen in Excel und überprüfe den Code, den Du von anderen erhalten hast, um sicherzustellen, dass er keine schädlichen Anweisungen enthält.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige