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

Forumthread: Makro: Dateien öffnen, kopieren, schließen

Makro: Dateien öffnen, kopieren, schließen
08.04.2019 18:21:24
Wal
Hallo zusammen,
ich brauche mal eure Hilfe:
Ich habe mehrere Dateien (deren Dateinamen ändern sich monatlich).
Daher habe ich diesen Code geschrieben, um alle Dateien im Ordner zu öffnen.
Leider will er die aktuelle auch öffnen, so dass ich eine Fehlermeldung bekomme.
Heißt im ersten Schritt müsste ich eine Datei ausschließen.
Dann will ich von jeder Datei die Zellen A3:Z2000 kopieren und in der Hauptdatei einfügen heißt, dass die jeweils nächste Datei um 2000 Zeilen weiter unten eingefügt werden muss.
Danach will ich alle leeren Zeilen in der Hauptdatei ausblenden und danach alle Dateien, bis auf die Hauptdatei schließen.
Leider habe ich erst diesen Ansatz,
jedoch funktioniert er nur bis zu dem Punkt, bis er die Hauptdatei (die ist im gleichen Ordner) _
öffnen will:

Sub OpenFiles()
Const FILE_PATH As String = "P:\Listen\"
Dim MyFile As String
Dim objWorkbook As Workbook
Application.ScreenUpdating = False
MyFile = Dir$(FILE_PATH & "*.xlsx")
Do Until MyFile = ""
Set objWorkbook = Workbooks.Open(Filename:=FILE_PATH & MyFile, UpdateLinks:=3)
Call objWorkbook.Close(SaveChanges:=True)
MyFile = Dir$
Loop
Application.ScreenUpdating = True
End Sub

Ich danke euch im Voraus für eure Mühe! :)
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro: Dateien öffnen, kopieren, schließen
08.04.2019 18:46:43
Hajo_Zi
if ThisWorkbook.NameFILE_PATH then
set objWorkbook = Workbooks.Open(Filename:=FILE_PATH & MyFile, UpdateLinks:=3)

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
Anzeige
AW: Makro: Dateien öffnen, kopieren, schließen
08.04.2019 19:42:42
Nepumuk
Hallo Wal,
teste mal:
Sub OpenFiles()
    Const FILE_PATH As String = "P:\Listen\"
    Dim MyFile As String
    Dim objWorkbook As Workbook
    
    Application.ScreenUpdating = False
    
    MyFile = Dir$(FILE_PATH & "*.xlsx")
    
    Do Until MyFile = ""
        
        If MyFile <> ThisWorkbook.Name Then
            
            Set objWorkbook = Workbooks.Open(Filename:=FILE_PATH & MyFile, UpdateLinks:=3)
            
            Call objWorkbook.Close(SaveChanges:=True)
            
        End If
        
        MyFile = Dir$
    Loop
    Application.ScreenUpdating = True
End Sub

Gruß
Nepumuk
Anzeige
AW: Makro: Dateien öffnen, kopieren, schließen
08.04.2019 22:26:30
Wal
Danke, kannst du mir bei den anderen Punkten auch helfen?
AW: Makro: Dateien öffnen, kopieren, schließen
09.04.2019 11:13:37
Nepumuk
Hallo Wal,
teste mal:
Option Explicit

Public Sub OpenFiles()
    
    Const FILE_PATH As String = "P:\Listen\"
    
    Dim MyFile As String
    Dim objWorkbook As Workbook
    Dim lngRow As Long
    
    Application.ScreenUpdating = False
    
    Call ThisWorkbook.Worksheets("Tabelle1").Cells.ClearContents
    
    lngRow = 1
    
    MyFile = Dir$(FILE_PATH & "*.xlsx")
    
    Do Until MyFile = ""
        
        If MyFile <> ThisWorkbook.Name Then
            
            Set objWorkbook = Workbooks.Open(Filename:=FILE_PATH & MyFile, UpdateLinks:=3)
            
            Call objWorkbook.Worksheets("Tabelle1").Range("A1:Z2000").Copy( _
                Destination:=ThisWorkbook.Worksheets("Tabelle1").Cells(lngRow, 1))
            
            lngRow = lngRow + 2000
            
            Call objWorkbook.Close(SaveChanges:=True)
            
        End If
        
        MyFile = Dir$
        
    Loop
    
    With ThisWorkbook.Worksheets("Tabelle1")
        .Cells(.Cells(.Rows.Count, 1).End(xlUp). _
            Offset(1, 0).Row, .Rows.Count).EntireRow.Hidden = True
        .Cells(.Cells(.Columns.Count, 1).End(xlToLeft). _
            Offset(0, 1).Column, .Columns.Count).EntireColumn.Hidden = True
    End With
    
    Application.ScreenUpdating = True
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Makro: Dateien öffnen, kopieren, schließen
09.04.2019 14:54:27
Wal
Leider bekomme ich an dieser Stelle:
Call ThisWorkbook.Worksheets("Tabelle1").Cells.ClearContents
Index außerhalb des gültigen Bereichs, auch wenn ich den Namen Tabelle1 ändere
AW: Makro: Dateien öffnen, kopieren, schließen
09.04.2019 14:54:29
Wal
Leider bekomme ich an dieser Stelle:
Call ThisWorkbook.Worksheets("Tabelle1").Cells.ClearContents
Index außerhalb des gültigen Bereichs, auch wenn ich den Namen Tabelle1 ändere
Anzeige
AW: Makro: Dateien öffnen, kopieren, schließen
09.04.2019 16:07:31
Nepumuk
Hallo Wal,
kann es sein, dass sich beim Tabellennamen ein Leerzeichen vorne oder hinten eingeschlichen hat?
Gruß
Nepumuk
AW: Makro: Dateien öffnen, kopieren, schließen
08.04.2019 22:25:50
Wal
Hallo Ihr beiden, ich habe den Code von Nepumuk genutzt und es klappt super, könnt ihr mir bei den anderen Punkten auch helfen?
AW: Makro: Dateien öffnen, kopieren, schließen
09.04.2019 22:03:25
Wal
Hey, es lag tatsächlich daran. :)
Nun funktioniert es auch, jedoch bekomme ich die Nachricht:
"Anwendungs- oder objektdefinierter Fehler"
.Cells(.Cells(.Rows.Count, 1).End(xlUp). _
Offset(1, 0).Row, .Rows.Count).EntireRow.Hidden = True
Scheinbar liegt es an den Zeilen.
Aber danke erstmal für deine Hilfe :)
Anzeige
AW: Makro: Dateien öffnen, kopieren, schließen
10.04.2019 04:45:49
Nepumuk
Hallo Wal,
da hatte ich einen Denkfehler. So geht's:
With ThisWorkbook.Worksheets("Tabelle1")
    .Range(.Cells(.Rows.Count, 1).End(xlUp). _
        Offset(1, 0), .Cells(.Rows.Count, 1)).EntireRow.Hidden = True
    .Range(.Cells(1, .Columns.Count).End(xlToLeft). _
        Offset(0, 1), .Cells(1, .Columns.Count)).EntireColumn.Hidden = True
End With

Gruß
Nepumuk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro zum Öffnen, Kopieren und Schließen von Excel-Dateien


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Anwendung und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.
  3. Kopiere den folgenden VBA-Code in das Modul:
Sub OpenFiles()
    Const FILE_PATH As String = "P:\Listen\"
    Dim MyFile As String
    Dim objWorkbook As Workbook
    Dim lngRow As Long

    Application.ScreenUpdating = False
    Call ThisWorkbook.Worksheets("Tabelle1").Cells.ClearContents
    lngRow = 1

    MyFile = Dir$(FILE_PATH & "*.xlsx")

    Do Until MyFile = ""
        If MyFile <> ThisWorkbook.Name Then
            Set objWorkbook = Workbooks.Open(Filename:=FILE_PATH & MyFile, UpdateLinks:=3)
            objWorkbook.Worksheets("Tabelle1").Range("A1:Z2000").Copy _
                Destination:=ThisWorkbook.Worksheets("Tabelle1").Cells(lngRow, 1)
            lngRow = lngRow + 2000
            objWorkbook.Close SaveChanges:=True
        End If
        MyFile = Dir$
    Loop

    With ThisWorkbook.Worksheets("Tabelle1")
        .Range(.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0), .Cells(.Rows.Count, 1)).EntireRow.Hidden = True
        .Range(.Cells(1, .Columns.Count).End(xlToLeft).Offset(0, 1), .Cells(1, .Columns.Count)).EntireColumn.Hidden = True
    End With

    Application.ScreenUpdating = True
End Sub
  1. Passe den FILE_PATH an: Ändere den Pfad zu dem Ordner, in dem sich deine Excel-Dateien befinden.
  2. Führe das Makro aus: Drücke F5 oder gehe zu "Run" > "Run Sub/UserForm".

Die obigen Schritte ermöglichen es Dir, mehrere Excel-Dateien zu öffnen, deren Inhalte zu kopieren und in einer Hauptdatei zusammenzuführen.


Häufige Fehler und Lösungen

  • Fehler: "Index außerhalb des gültigen Bereichs"

    • Überprüfe, ob der Name des Arbeitsblatts korrekt ist. Stelle sicher, dass kein Leerzeichen oder Tippfehler im Tabellennamen vorhanden ist.
  • Fehler: "Anwendungs- oder objektdefinierter Fehler"

    • Dies kann auftreten, wenn die Range-Referenz nicht korrekt ist. Überprüfe den Code, insbesondere die Zeilen, die die Sichtbarkeit von Zeilen und Spalten steuern.

Alternative Methoden

Ein alternatives Skript kann verwendet werden, um Daten aus _xls-Dateien anzuzeigen und zu kopieren. Hier ist ein einfaches Beispiel:

Sub OpenXLSFiles()
    Const FILE_PATH As String = "P:\Listen\"
    Dim MyFile As String
    Dim objWorkbook As Workbook

    MyFile = Dir$(FILE_PATH & "*.xls")

    Do Until MyFile = ""
        Set objWorkbook = Workbooks.Open(Filename:=FILE_PATH & MyFile)
        ' Hier kannst Du deine Operationen durchführen
        objWorkbook.Close SaveChanges:=False
        MyFile = Dir$
    Loop
End Sub

Praktische Beispiele

Wenn Du eine Excel-Datei öffnen und deren Inhalt kopieren möchtest, kannst Du die oben genannten Schritte leicht anpassen. Hier ein Beispiel, wie Du Daten aus einer Datei in der Hauptdatei speichern kannst.

  1. Lege eine Excel-Datei mit Namen "Hauptdatei.xlsx" an.
  2. Füge das Skript aus der Schritt-für-Schritt-Anleitung ein.
  3. Stelle sicher, dass die Datei im korrekten Verzeichnis gespeichert ist.

Tipps für Profis

  • Verwende Option Explicit am Anfang Deines Codes, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Tippfehler zu vermeiden.
  • Nutze Fehlerbehandlungsroutinen: Füge On Error Resume Next hinzu, um Fehler zu ignorieren oder On Error GoTo ErrorHandler, um Fehler gezielt zu behandeln.
  • Optimiere den Code: Anstelle von Application.ScreenUpdating = False und True kannst Du auch Application.Calculation = xlCalculationManual verwenden, um die Berechnungen während des Kopierens zu stoppen.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um andere Daten zu kopieren? Du kannst die Range im .Copy-Befehl ändern, um spezifische Zellen oder Bereiche zu kopieren.

2. Was ist der Unterschied zwischen xls und xlsx? xls ist das ältere Format von Excel, während xlsx das neuere, XML-basierte Format ist, das mehr Funktionen unterstützt.

3. Wie kann ich das Makro für andere Excel-Versionen anpassen? Die meisten der vorgestellten VBA-Funktionen sind in Excel 2007 und höher kompatibel. Für ältere Versionen überprüfe die spezifischen Funktionen.

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