Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Mehrere Dateien in Listobject kopieren

Forumthread: Mehrere Dateien in Listobject kopieren

Mehrere Dateien in Listobject kopieren
11.04.2025 15:13:55
Wildfire
Moin Gemeinde,

ich habe folgendes Anliegen.
Wir bekommen täglich, wöchentlich, monatlich entsprechende Excel-Dateien zugeschickt (Export-Dateien). Diese müssen wir zusammenfassen und auswerten. Diese Exceldateien sind immer gleich aufgebaut:
- 1 Tabellenblatt (export)
- Zeile 1 sind die Spaltenüberschriften (A1:BW1)
- Zeile 2 die enthaltenen Daten (A2:BW2)
- Diese Daten sind auch nur direkt im Tabellenblatt eingetragen nicht in einer intelligenten Tabelle (ListObject)

jetzt habe ich eine weitere Exceldatei zur Auswertung, in der ich per VBA die ganzen zugeschickten Dateien in eine intelligente Tabelle (Listobject) auf dem Tabellenblatt "Import" zusammenfassen möchten:
1. Dateiauswahldialog öffnen um 1 bzw x der zugeschickten Export-Dateien auswählen kann
2. dann ausschließlich jeweils die 2. Zeile aus der jeweiligen EXPORT-Datei in die intelligente Tabelle (Listobject) auf dem Tabellenblatt IMPORT anhängen
3. Duplikate sollen dann entfernt werden (RemoveDuplicates), hierfür gilt Spalte A als eindeutiger Wert

Das Script wird in der Auswertedatei per Schaltfläche ausgeführt.
Ich habe es bisher immer nur in eine nicht intelligente Tabelle, also normales Tabellenblatt eingefügt, für die Weiterverarbeitung birgt dies jedoch mittlerweile viele Probleme.

Wie kann ich das bestehende Script entsprechend umbauen? Bitte nicht gleich steinigen wenn der Code totale Grütze ist. Ich lerne noch :D Ist halt viel zusammenkopiert.
Hier das jetzige Script:

Sub Daten_zusammenfassen()

Dim WBnew As Variant
Dim ws As Worksheet 'Ziel Tabellenblatt Import
Dim intDatei As Long
Dim WBN As Workbook
Dim WSN As Worksheet 'Quell Tabellenblatt export der jeweils ausgewählten Datei
Dim intLZ As Integer
Dim intLZnew As Integer

Set ws = ThisWorkbook.Sheets(1) ' hier werden die Daten hin importiert

WBnew = Application.GetOpenFilename("Excel Dateien (*.xls),*.xls", , "XLS", "Auswahl", True) _

' Mehrfachauswahl der Quelldateien
If TypeName(WBnew) Like "Boolean" Then
MsgBox "Keine Datei ausgewählt!", vbInformation
Exit Sub
Else
Application.ScreenUpdating = False
Application.DisplayAlerts = False

For intDatei = 1 To UBound(WBnew)
Debug.Print WBnew(intDatei)
Set WBN = Workbooks.Open(WBnew(intDatei))
With WBN
Set WSN = WBN.Sheets("export")
intLZ = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
intLZnew = WSN.Cells(Rows.Count, 1).End(xlUp).Row
WSN.Range("A2:BW" & intLZnew).Copy
ws.Cells(intLZ, 1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
ws.Range("A:BW").RemoveDuplicates Columns:=1, Header:=xlYes
Set WSN = Nothing
.Close False
End With

Set WBN = Nothing
Next intDatei

' aktuelles Datum in die Zelle C14 Tabellenblatt Übersicht, schreiben als Stand des letzten Imports
Range("Stand") = Format(Now, "dd.MM.yyyy")

Application.ScreenUpdating = True
Application.DisplayAlerts = True
End If

Set ws = Nothing

MsgBox "Der Import wurde abgeschlossen!"
End Sub



und als 2. Frage wie könnte ich hingehen und ggf. den Inhalt, des ListObject löschen. Mit databodyrange.clear löscht er ja nur den Inhalt, wie lösche ich sämtliche Zeile aus der DataBodyRange. Das Listobject soll aber weiter bestehen bleiben.

Bei der Auswertedatei ist die Tabelle noch NICHT als intelligente Tabelle konvertiert. So wie es dort jetzt ist funktioniert das Script auch.

Hier der Link zur hochgeladenen Beispieldatei bzw zum ZIP-File (Auswertedatei und export enthalten): https://www.herber.de/bbs/user/176698.zip

Ich hoffe ich habe nichts vergessen zu beschreiben.

Vielen Dank schonmal für eure Hilfe

LG
TC
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
In dem Fall...
11.04.2025 15:42:23
Case
Moin, :-)

... würde ich Power Query empfehlen. Du packst alle Exportdateien in einen Ordner und kannst den Ordner abfragen (Punkt 5): ;-)
https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

Kommen neue Dateien - einfach in den Ordner kopieren und die Abfrage Aktualisieren. Fertig. ;-)

Du kannst daraus dann auch ein Pivot-Chart zur Auswertung machen. ;-)

Ich lasse mal auf "Offen" - falls du unbedingt VBA willst. ;-)

Servus
Case
Anzeige
AW: Mehrere Dateien in Listobject kopieren
14.04.2025 14:07:04
Wildfire
So ich habe jetzt nochmal viel rumgebastelt und eine Lösung gefunden wie es klappt. Ist halt nur zu Doku-Zwecken falls jemand mal was ähnliches sucht, kann man sich zumindest daran lang hangeln. Ja der Code mag nicht schön sein aber dafür selten :D und er funktioniert auch nach mehrmaligen Tests.

Trotzdem nochmal Danke an Case bzgl. der PowerQuery Info, dies ist auch eine sehr schöne Variante sofern die Permance des Netzwerks entsprechend gegeben ist.

Sub Daten_zusammenfassen()

Dim WBnew As Variant
Dim ws As Worksheet
Dim intDatei As Long
Dim WBN As Workbook
Dim WSN As Worksheet
Dim intLZ As Integer
Dim intLZnew As Integer
Dim tbl As ListObject


Set ws = ThisWorkbook.Sheets(1) ' hier werden die Daten hin importiert
Set tbl = Tabelle1.ListObjects(1)

WBnew = Application.GetOpenFilename("Excel Dateien (*.xls),*.xls", , "XLS", "Auswahl", True) _

' Mehrfachauswahl der Quelldateien
If TypeName(WBnew) Like "Boolean" Then
MsgBox "Keine Datei ausgewählt!", vbInformation
Exit Sub
Else
Application.ScreenUpdating = False
Application.DisplayAlerts = False

For intDatei = 1 To UBound(WBnew)
Debug.Print WBnew(intDatei)
Set WBN = Workbooks.Open(WBnew(intDatei))
With WBN
Set WSN = WBN.Sheets("export")
tbl.ListRows.Add ' neue Zeile in die intelligente Tabelle einfügen
intLZ = ws.Cells(Rows.Count, 1).End(xlUp).Row 'ermittelt die letzte Zeile im Tabellenblatt import

WSN.Range("A2:BW2").Copy 'kopiert die Exportzeile in die Zwischneablage
ws.Cells(intLZ, 1).PasteSpecial Paste:=xlPasteValues ' Zwischenablage in die Zeile als WERTE einfügen
Application.CutCopyMode = False

Set WSN = Nothing
.Close False
End With
tbl.DataBodyRange.RemoveDuplicates Columns:=1, Header:=xlYes

Set WBN = Nothing
Next intDatei

' aktuelles Datum in die Zelle C14 Tabellenblatt Übersicht, mit dem namen Stand schreiben als Stand des letzten Imports
Range("Stand") = Format(Now, "dd.MM.yyyy")

Application.ScreenUpdating = True
Application.DisplayAlerts = True
End If

Set ws = Nothing

MsgBox "Der Import wurde abgeschlossen!"
End Sub


Anzeige
AW: In dem Fall...
11.04.2025 15:50:18
Wildfire
Hi danke dir Case für die schnelle Antwort, allgemein schon eine gute Idee, aber bei mittlerweile 3k Datensätzen/Dateien, dauert es auf dem Netzlaufwerk über eine Stunde per PowerQuery. Mit VBA deutlich schneller ca. 15 Minuten bis alle eingelesen wurden. Daher würde ich auch gerne hierfür eine Lösung haben sofern dies möglich ist.

LG TC
Anzeige
Du kannst in...
11.04.2025 16:10:31
Case
Moin, :-)

... Power Query eine Abfrage erstellen, welche die schon eingelesenen Dateien ausschließt. Die wird einfach am Anfang genommen und vergleicht die schon eingelesenen Dateien und am Ende wird sie aktualisiert. ;-)

Das spart Zeit. ;-)

Servus
Case
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige