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

Excel Dateien zu einer zusammenfuehren

Excel Dateien zu einer zusammenfuehren
05.11.2021 11:16:47
Stefan
Moin zusammen,
zum Zusammenführen gleich strukturierter Exceldateien setze ich die Lösung von 'Michael (migre)' ein. Vielen Dank an dieser Stelle dafür.
https://www.herber.de/forum/archiv/1552to1556/1552046_Excel_Dateien_zu_einer_zusammenfuehren.html
Ein paar kleine Anpassungen habe ich vorgenommen (Spaltenbereich, Löschen von Zeilenüberschriften etc.). Der von mir eingesetzte Code ist dieser hier:
https://www.herber.de/bbs/user/148956.xlsm
Mein Problem: Wenn die Spalte A des Tabelle komplett leer ist, wird die gesamte Tabelle nicht übernommen. Das trifft hier für die Beispieldatei 'test4.xlsx' zu.
https://www.herber.de/bbs/user/148957.xlsx
https://www.herber.de/bbs/user/148958.xlsx
https://www.herber.de/bbs/user/148959.xlsx
https://www.herber.de/bbs/user/148960.xlsx
Hat dazu jemand eine Idee?
Viele Grüße Stefan

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Dateien zu einer zusammenfuehren
05.11.2021 11:19:44
Herbert_Grom
Hallo Stefan,
welche der 4 ist die "test4.xlsx"?
Servus
AW: Excel Dateien zu einer zusammenfuehren
05.11.2021 13:29:50
Werner
Hallo,
versuch es mal beim Ermitteln der letzten belegten Zelle statt mit dem

Set DatenBereich = .Range("A1:U" & _
.Cells(.Rows.Count, 1).End(xlUp).Row)
mit dem hier:

Set DatenBereich = .Range("A1:U" & _
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeLastCell).Row)
Gruß Werner
Anzeige
AW: Excel Dateien zu einer zusammenfuehren
05.11.2021 13:40:58
Stefan
Hallo Werner,
danke, das funktioniert grundsätzlich. Dazu müsste ich aber den Schutz aller Quellarbeitsblätter aufheben.
Sonst bekomme ich einen Laufzeitfehler 1004 und die Meldung, dass dieser Befehl für ein geschütztes Blatt nicht verwendet werden kann. Ja, die Quelldateien haben geschützte Arbeitsblätter.
Wie könnte man das umgehen?
Grüße Stefan
AW: Excel Dateien zu einer zusammenfuehren
05.11.2021 14:39:30
Werner
Hallo,
1. Möglichkeit: CurrentRegion verwenden und per Makro den Blattschutz der Blätter vorher rausnehmen
2. Möglichkeit: Mit Usedrange

Set DatenBereich = .Range("A1:U" & .UsedRange.Rows.Count)
3. Möglichkeit: Deinen ursprünglichen Code weiter verwenden aber die Spalte in der die letzte Zeile gesucht wird von Spalte A auf eine Spalte ändern, in der sicher immer Daten bis zum Ende vorhanden sind.
Gruß Werner
Anzeige
AW: Excel Dateien zu einer zusammenfuehren
08.11.2021 09:33:53
Stefan
Moin Werner,
mit Version 2 klappt nun die Verarbeitung geschützter Blätter. Danke.
Aber das Problem bleibt bestehen. Es stellt sich jedoch etwas anders dar, als ich es zunächst beschrieben hatte. Meine ursprüngliche Annahme war ja, dass ein Tabellenblatt, welches in Spalte A keine Einträge hat, nicht verarbeitet wird. Tatsächlich wird es verarbeitet, aber vom nachfolgenden Tabellenblatt überschrieben.
Ich habe nun ergänzend zu den vier Testdateien eine fünfte Datei hochgeladen, deren Spalte A ebenfalls leer ist:
https://www.herber.de/bbs/user/149000.xlsx
Außerdem habe ich vorübergehend das Löschen der Kopfzeilen ausgeblendet, damit man sieht, wieviele Dateien verarbeitet wurden.
Der Testcode ist hier:
https://www.herber.de/bbs/user/149001.xlsm
Wenn ich den Test laufen lasse, fehlt der Inhalt der vierten Tabelle (Firma 4...), deren Spalte A leer ist. Der Inhalt der fünften Tabelle (Firma 5...) dagegen ist enthalten, obwohl die Spalte A leer ist. Diese Tabelle wird als letzte Tabelle verarbeitet.
Hast du noch eine Idee?
Viele Grüße Stefan
Anzeige
AW: Excel Dateien zu einer zusammenfuehren
08.11.2021 12:54:51
Werner
Hallo,
ist ja logisch, weil du im Zielblatt die letzte belegte Zelle in Spalte A ermittelst. Hast du dann zwischendrin eine Quelldatei, deren Spalte A leer ist, dann werden die von den Daten der nächsten Quelldatei überschrieben, eben weil dann ja im Zielblatt in Spalte A vom vorherigen Blatt keine Daten vorhanden sind, du aber dort die letzte belegte Zelle ermittelst.
Entweder du ermittelst die letzte belegte Zelle im Zielblatt in einer anderen Spalte - muss dann natürlich auch eine Spalte sein, die sicher Daten enthält.

.Cells(.Rows.Count, "B").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats
Oder du nimmst hier auch UsedRange

.Cells(.UsedRange.Rows.Count, "A").Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Gruß Werner
Anzeige
AW: Excel Dateien zu einer zusammenfuehren
08.11.2021 14:54:01
Stefan
Hallo Werner,
die Version 1 kann ich nicht verwenden, weil ich nie sicher sein kann, dass eine Spalte wirklich einen Wert enthält.
Bei Version 2 (die mit '.UsedRange'). werden nun alle Dateien verarbeitet. Aber komischerweise wird beim Einsetzen der folgenden Tabelle die letzte Zeile der bereits eingesetzten Tabellen überschrieben. Es fehlt also nun immer die letzte Zeile einer Tabelle. Lediglich die zuletzt eingesetzte Tabelle hat alle Zeilen, da ja hier keine mehr nachfolgt.
Ich habe mit die einzelnen Parameter der Codezeile mal angesehen, aber leider reichen meine VBA-Kenntnisse nicht aus, um erkennen zu können, warum das so ist.
Viele Grüße Stefan
Anzeige
AW: Excel Dateien zu einer zusammenfuehren
08.11.2021 15:03:37
Werner
Hallo,
würde mal vermuten, dass die erste Zeile in deiner Zieltabelle leer ist. Erhöhe doch den Offset von 1 auf 2
Gruß Werner
AW: Excel Dateien zu einer zusammenfuehren
08.11.2021 15:21:53
Stefan
Hallo Werner,
das hatte ich schon getestet. Der Offset beschreibt die Anzahl Zeilen, die in der Zieltabelle leer bleiben, bevor die Werte beginnen. Offset = 0, und die Werte beginnen in Zeile 1, Offset = 1 und ich habe eine Leerzeile oben. Der Offset hat aber offensichtlich nichts mit dem 'Abstand' der zusammengeführten Tabellen zu tun. Und der Effekt tritt nur auf, wenn ich die letzte Codeänderung vornehme.
Grüße Stefan
AW: Excel Dateien zu einer zusammenfuehren
08.11.2021 15:51:33
Werner
Hallo,
wenn du in Zeile 1 beginnen willst, dann mußt du prüfen, ob Zeile 1 leer ist. Wenn ja, dann in Zeile 1 einfügen. Wenn nein, dann mit UsedRange und Offset(1) einfügen.

With WsZ
If WorksheetFunction.CountA(.Rows(1)) = 0 Then
.Cells(1, "A").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Else
.Cells(.UsedRange.Rows.Count, "A").Offset(1).PasteSpecial xlPasteValuesAndNumberFormats
End If
End With
Gruß Werner
Anzeige
AW: Excel Dateien zu einer zusammenfuehren
08.11.2021 16:17:05
Stefan
Hallo Werner,
super, jetzt läuft es, wie es soll. Ganz herzlichen Dank für deine Hilfe.
Für die Nachwelt hier der komplette funktionierende Code:

Sub a()
' Tabellenblatt "Adressen zusammengeführt" löschen, falls es existiert
Application.DisplayAlerts = False
Dim sh
For Each sh In Sheets
If sh.Name = "Adressen zusammengeführt" Then
Sheets("Adressen zusammengeführt").Delete
End If
Next
Application.DisplayAlerts = True
' neues Tabellenblatt anlegen und benennen
Sheets.Add after:=Sheets(Worksheets.Count)
ActiveSheet.Name = "Adressen zusammengeführt"
Const BLATT$ = "Adressen"
Dim WbZ As Workbook: Set WbZ = ThisWorkbook
Dim WsZ As Worksheet: Set WsZ = WbZ.Worksheets(2)
Dim WbQ As Workbook, SuchDialog As FileDialog
Dim WsQ As Worksheet
Dim Pfad$, DatenBereich As Range, Datei$, DateBereich As Range
Dim Von&, Bis&
' Bildschirmausgabe deaktivieren (will ich aber sehen :-))
' Application.ScreenUpdating = False
' Quellverzeichnis auswählen
Set SuchDialog = Application.FileDialog(msoFileDialogFolderPicker)
With SuchDialog
.Title = "Bitte Verzeichnis wählen"
.AllowMultiSelect = False
If .Show  -1 Then
MsgBox "Vorgang abgebrochen", vbInformation
Exit Sub
Else: Pfad = .SelectedItems(1)
End If
End With
Datei = Dir(Pfad & "\" & "*.xls*", vbDirectory)
Do Until Datei = vbNullString
If Not Datei = WbZ.Name Then
Set WbQ = Workbooks.Open(Pfad & "\" & Datei)
With WbQ.Worksheets(BLATT)
' Spalten A bis U werden aus Quelle kopiert
Set DatenBereich = .Range("A1:U" & .UsedRange.Rows.Count)
DatenBereich.Copy
' kopierte Daten werden ans Ziel angefügt
With WsZ
If WorksheetFunction.CountA(.Rows(1)) = 0 Then
.Cells(1, "A").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Else
.Cells(.UsedRange.Rows.Count, "A").Offset(1).PasteSpecial xlPasteValuesAndNumberFormats
End If
End With
End With
Application.CutCopyMode = False: WbQ.Close False
End If
Datei = Dir
Loop
' Zeilen mit Feldnamen löschen
Dim i As Long
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(i, 1) = "Magazine" Then Rows(i).Delete
Next i
MsgBox "Daten der Dateien aus " & Pfad & " wurden kopiert", vbInformation, "Vorgang beendet!"
Set WbZ = Nothing
Set WsZ = Nothing
Set WbQ = Nothing
Set WsQ = Nothing
Set DatenBereich = Nothing
End Sub
Und hier der Link zum Download:
https://www.herber.de/bbs/user/149007.xlsm
Viele Grüße Stefan
Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
08.11.2021 16:59:20
Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige