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

Dateien mittels Makro importieren

Dateien mittels Makro importieren
19.04.2020 13:26:42
John
Hallo liebe Excel-Community,
habe folgendes Problem und hoffe es kann mir jemand weiterhelfen, da ich schon kurz vorm verzweifeln bin ;)
Ausgangssituation:
Ich habe eine Excel-Hauptdatei (anbei eine abgespeckte Beispieldatei: TEST.xlsm) mit einem Tabellenblatt Importliste. Per Makro sollen nun aus einem definierten Hauptverzeichnis der Inhalt angeführten Dateien im Tabellenblatt Importliste (Spalte A --> die zu importierenden Dateien sind alle gleich aufgebaut und haben immer nur 1 Tabellenblatt mit Daten)) in definierte Tabellenblätter (Spalte B) ab einer gewissen Zeile (Spalte C) importiert werden. Zusätzlich sollen die vorhandenen Daten in den Tabellenblätter-bevor die neuen importiert- gelöscht werden.
Ich brauche deshalb eine Makro-Lösung, da täglich ca. 50 Einzeldateien in einem Ordner abgespeichert werden und aus diesen ein standardiesierter Bericht in der Excel Hauptdatei erzeugt wird.
Anbei habe ich eine entsprechende Test-Datei (TEST_V2.xlsm) mit Musteraufbau und Makro angefügt.
Leider weiß ich nicht was in meinem Makro nicht passt.
Ich hoffe ihr könnt mir weiterhelfen BIIIIITTTTEEEE ;)
MAKRO:

Sub IMPORTIERE()
'Das ist die Importtaste in der Tabelle IMPORTLISTE mit der alle Quelldateien ausgelesen und
'in die betreffenden Zieltabellen eingefügt werden
Dim DATEI As String 'Quelldateiname
Dim PFAD As String 'Quelldateipfad
Dim I As Long
Dim T As Integer
Dim s As Integer
Dim WERT
Dim ZIELTABELLE As String 'Name der Zieltabelle
Dim BEREICH As String 'der zu kopierende Zellbereich der Quelldatei
Dim SPALTE As Integer
Dim ZEILE As Integer
Dim ERSTEZEILE As Integer
Dim ZEILENDIFFERENZ As Integer 'wieviel höher die Zieltabellenzeilen sind als die  _
Quelltabellenzeilen
Dim AKTUELLEDATEI
Dim LETZTEZELLE
'Quellpfad um \ erweitern
If Right(Sheets("Importliste").Range("F7"), 1)  "\" Then Sheets("Importliste").Range("F7") =   _
_
Sheets("Importliste").Range("F7") & "\"
'ChDrive (Left(Sheets("Importliste").Range("F7"), 1))
'ChDir (Sheets("Importliste").Range("F7"))
AKTUELLEDATEI = ActiveWorkbook.Name
On Error GoTo DATEI_NICHT_GEFUNDEN
'Schleife durch alle Dateien in der Tabelle IMPORTLISTE
For s = 2 To LETZTEZELLE(Worksheets("Importliste")).Row
PFAD = Sheets("Importliste").Range("F7")
DATEI = Sheets("Importliste").Range("A" & s).Text
ZIELTABELLE = Sheets("Importliste").Range("B" & s).Text
BEREICH = "A" & Sheets("Importliste").Range("B" & s) & ":IU60000"
ERSTEZEILE = Sheets("Importliste").Range("C" & s).Text
Sheets(ZIELTABELLE).Range("A1:IV65000").ClearContents
Application.ScreenUpdating = False 'Bild nicht aktualisieren
Workbooks.Open PFAD & DATEI
ZEILENDIFFERENZ = ERSTEZEILE - 1
For ZEILE = ERSTEZEILE To LETZTEZELLE(Workbooks(DATEI).Worksheets(1)).Row
For SPALTE = 1 To LETZTEZELLE(Workbooks(DATEI).Worksheets(1)).Column
Workbooks(AKTUELLEDATEI).Sheets(ZIELTABELLE).Cells(ZEILE - ZEILENDIFFERENZ, SPALTE) =  _
Workbooks(DATEI).Worksheets(1).Cells(ZEILE, SPALTE)
Next SPALTE
Next ZEILE
Workbooks(DATEI).Close
Application.ScreenUpdating = True
Next s
Exit Sub
DATEI_NICHT_GEFUNDEN:
MsgBox "Die Datei ’" & DATEI & "’ konnte nicht im Verzeichnis ’" & PFAD & "’ gefunden werden." & _
_
vbCrLf & vbCrLf & _
"Stellen Sie sicher, dass die Datei im angegebenen Verzeichnis existiert oder ändern Sie die  _
Einstellungen hier in der Tabelle ’Importliste’."
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Dateien mittels Makro importieren
19.04.2020 17:06:17
Regina
Hi,
was funktioniert denn nicht? Um das austesten zu können, solltest Du auch eine Datei hochladen, die importiert werden soll.
Gruß Regina
AW: Dateien mittels Makro importieren
19.04.2020 17:15:14
Regina
... ich habe hier mal ein paar Fehler korrigiert (betraf die Schleifen-Abbruchbedingungen). Vielleicht war es das schon:
Sub IMPORTIERE()
'Das ist die Importtaste in der Tabelle IMPORTLISTE mit der alle Quelldateien ausgelesen und
'in die betreffenden Zieltabellen eingefügt werden
Dim DATEI As String 'Quelldateiname
Dim PFAD As String 'Quelldateipfad
Dim I As Long
Dim T As Integer
Dim s As Integer
Dim WERT
Dim ZIELTABELLE As String 'Name der Zieltabelle
Dim BEREICH As String 'der zu kopierende Zellbereich der Quelldatei
Dim SPALTE As Integer
Dim ZEILE As Integer
Dim ERSTEZEILE As Integer
Dim ZEILENDIFFERENZ As Integer 'wieviel höher die Zieltabellenzeilen sind als die  _
Quelltabellenzeilen
Dim AKTUELLEDATEI As String
'Quellpfad um \ erweitern
If Right(Sheets("Importliste").Range("F7"), 1)  "\" Then Sheets("Importliste").Range("F7") =  _
Sheets("Importliste").Range("F7") & "\"
'ChDrive (Left(Sheets("Importliste").Range("F7"), 1))
'ChDir (Sheets("Importliste").Range("F7"))
AKTUELLEDATEI = ActiveWorkbook.Name
On Error GoTo DATEI_NICHT_GEFUNDEN
'Schleife durch alle Dateien in der Tabelle IMPORTLISTE
For s = 2 To Worksheets("Importliste").Cells(Rows.Count, 1).End(xlUp).Row
PFAD = Sheets("Importliste").Range("F7")
DATEI = Sheets("Importliste").Range("A" & s).Text
ZIELTABELLE = Sheets("Importliste").Range("B" & s).Text
BEREICH = "A" & Sheets("Importliste").Range("B" & s) & ":IU60000"
ERSTEZEILE = Sheets("Importliste").Range("C" & s).Text
Sheets(ZIELTABELLE).Range("A1:IV65000").ClearContents
Application.ScreenUpdating = False 'Bild nicht aktualisieren
Workbooks.Open PFAD & DATEI
ZEILENDIFFERENZ = ERSTEZEILE - 1
For ZEILE = ERSTEZEILE To Worksheets("DATEI").Cells(Rows.Count, 1).End(xlUp).Row
For SPALTE = 1 To Worksheets("Datei").Cells(2, Columns.Count).End(xlUp).Column
Workbooks(AKTUELLEDATEI).Sheets(ZIELTABELLE).Cells(ZEILE - ZEILENDIFFERENZ, SPALTE) =  _
Workbooks(DATEI).Worksheets(1).Cells(ZEILE, SPALTE)
Next SPALTE
Next ZEILE
Workbooks(DATEI).Close
Application.ScreenUpdating = True
Next s
Exit Sub
DATEI_NICHT_GEFUNDEN:
MsgBox "Die Datei ’" & DATEI & "’ konnte nicht im Verzeichnis ’" & PFAD & "’ gefunden werden." & _
vbCrLf & vbCrLf & _
"Stellen Sie sicher, dass die Datei im angegebenen Verzeichnis existiert oder ändern Sie die  _
Einstellungen hier in der Tabelle ’Importliste’."
End Sub
Gruß Regina
Anzeige
AW: Dateien mittels Makro importieren
19.04.2020 17:16:36
John
Hallo Regina,
sehr nett das du mir helfen möchtest. ;)
Anbei eine Beispieldatei: Die Dateien sind alle gleich aufgebaut: Sie haben in der ersten Zeile die Bezeichnung der Daten und ab der Zeile A2 sollen diese per Makro kopiert werden und in der Hauptdatei ab einer definierten Zeile (Spalte C in Hauptdatei: TEST_2) eingefügt werden.
Problem im Makro: Excel findet die Dateien nicht bzw. werden die Inhalte nicht importiert?
Hast du vl. einen Lösung?
lg JD
https://www.herber.de/bbs/user/136866.xlsx
AW: Dateien mittels Makro importieren
19.04.2020 17:34:39
Regina
Hi, dann teste mal den folgenden Code.
Neben der nicht schlüssigen Abbruchbedingungen für die Schleifen, lag ein Problem auch in Deiner Fehlerbehandlung. In Deinem Code wurde bei jedem Fehler, der auftrat die Meldung, dass die Datei nicht gefunden wurde, gebracht. Dadurch konntest Du anderen Fehlern gra nicht auf die Spur kommen.
Sub IMPORTIERE()
'Das ist die Importtaste in der Tabelle IMPORTLISTE mit der alle Quelldateien ausgelesen und
'in die betreffenden Zieltabellen eingefügt werden
Dim DATEI As String 'Quelldateiname
Dim PFAD As String 'Quelldateipfad
Dim I As Long
Dim T As Integer
Dim s As Integer
Dim WERT
Dim ZIELTABELLE As String 'Name der Zieltabelle
Dim BEREICH As String 'der zu kopierende Zellbereich der Quelldatei
Dim SPALTE As Long
Dim ZEILE As Long
Dim ERSTEZEILE As Long
Dim ZEILENDIFFERENZ As Long 'wieviel höher die Zieltabellenzeilen sind als die  _
Quelltabellenzeilen
Dim AKTUELLEDATEI As String
'Quellpfad um \ erweitern
If Right(Sheets("Importliste").Range("F7"), 1)  "\" Then Sheets("Importliste").Range("F7") =  _
Sheets("Importliste").Range("F7") & "\"
'ChDrive (Left(Sheets("Importliste").Range("F7"), 1))
'ChDir (Sheets("Importliste").Range("F7"))
AKTUELLEDATEI = ActiveWorkbook.Name
On Error GoTo DATEI_NICHT_GEFUNDEN
'Schleife durch alle Dateien in der Tabelle IMPORTLISTE
For s = 2 To Worksheets("Importliste").Cells(Rows.Count, 1).End(xlUp).Row
PFAD = Sheets("Importliste").Range("F7")
DATEI = Sheets("Importliste").Range("A" & s).Text
ZIELTABELLE = Sheets("Importliste").Range("B" & s).Text
BEREICH = "A" & Sheets("Importliste").Range("B" & s) & ":IU60000"
ERSTEZEILE = Sheets("Importliste").Range("C" & s).Text
Sheets(ZIELTABELLE).Range("A1:IV65000").ClearContents
Application.ScreenUpdating = False 'Bild nicht aktualisieren
Workbooks.Open PFAD & DATEI
'ZEILENDIFFERENZ = ERSTEZEILE - 1
For ZEILE = ERSTEZEILE To Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
For SPALTE = 1 To Worksheets(1).Cells(2, Columns.Count).End(xlToLeft).Column
Workbooks(AKTUELLEDATEI).Sheets(ZIELTABELLE).Cells(ZEILE, SPALTE) = Workbooks(DATEI). _
Worksheets(1).Cells(ZEILE, SPALTE)
Next SPALTE
Next ZEILE
Workbooks(DATEI).Close
Application.ScreenUpdating = True
Next s
Exit Sub
DATEI_NICHT_GEFUNDEN:
Select Case Err.Number
Case 1004
MsgBox "Die Datei ’" & DATEI & "’ konnte nicht im Verzeichnis ’" & PFAD & "’ gefunden  _
werden." & vbCrLf & vbCrLf & _
"Stellen Sie sicher, dass die Datei im angegebenen Verzeichnis existiert oder ändern Sie die  _
Einstellungen hier in der Tabelle ’Importliste’."
Case Else
MsgBox Err.Number & vbNewLine & Err.Description
End Select
End Sub
Gruß Regina
Anzeige
AW: Dateien mittels Makro importieren
19.04.2020 17:44:44
John
Hi Regina ;)
Ich danke dir. Du hast meinen Sonntag gerettet!
Läuft wie am Schnürchen.
Nochmals vielen Dank!
lg JD
AW: Dateien mittels Makro importieren
19.04.2020 18:04:51
Regina
... prima, danke für die Rückmeldung.
gruß Regina
AW: Dateien mittels Makro importieren
19.04.2020 18:08:40
SF
Und vorbildlich auch lieber John, dass du in allen Foren Bescheid gesagt hast, dass es hier gelöst wurde.
Sehr vorbildlich.....
Gruß,
steve1da

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige