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

VBA Mastertabelle erstellen

VBA Mastertabelle erstellen
27.07.2013 11:38:45
WalterK
Hallo,
bei meiner Internetsuche bin ich auf den folgenden Code zur Erstellung einer Mastertabelle gestossen. Es sollen die Daten aller in einem Ordner befindlichen Dateien in 1 Blatt zusammengeführt werden.
Allerdings kommt bei der folgenden Zeile die Meldung: Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler.
hier die Zeile: ActiveWorkbook.ActiveSheet.Range(Cells(2, 1), Cells(loLetzte2, inLetzte)).Copy Destination:=.Cells(loLetzte1 + 1, 1)
Sub zusammenfuegen()
Dim strDateiname As String
Dim loLetzte1 As Long
Dim loLetzte2 As Long
Dim inLetzte As Integer
Application.ScreenUpdating = False
strDateiname = Dir(ThisWorkbook.Path & "\*.xls")
With ThisWorkbook.Worksheets("Tabelle1")
Do While strDateiname  ""
If strDateiname  ThisWorkbook.Name Then
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strDateiname
loLetzte1 = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
loLetzte2 = ActiveWorkbook.ActiveSheet.UsedRange.SpecialCells( _
xlCellTypeLastCell).Row
inLetzte = ActiveWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell) _
.Column
ActiveWorkbook.ActiveSheet.Range(Cells(3, 1), Cells(loLetzte2, inLetzte)).Copy  _
Destination:=.Cells(loLetzte1 + 1, 1)
ActiveWorkbook.Close True
End If
strDateiname = Dir
Loop
End With
Application.ScreenUpdating = True
End Sub
Weiß vielleicht jemand, was ich falsch mache?
Danke und Servus, Walter

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Mastertabelle erstellen
27.07.2013 14:42:48
fcs
Hallo Walter,
aus irgendeinem Grund sind die Referenzen von Range und/oder Cells zum entsprechenden Tabellenblatt-Objekt unvollständig oder können nicht korrekt hergestellt werden.
Eine Ursache könnte sein, dass du dein Makro in einem Tabellenblatt-Modul speicherst und niht in einem allgemeinen Modul. Bei einem Tabellenblattmodul beziehen sich Range und Cells immmer auf die Tabelle, zu der das Modul gehrt, wenn nicht explizit zu einem anderen Tabellenblatt referenziert wird.
Wenn mehrere Dateien in Aktionen eingebunden sind, dann sollte man immer entsprechende Objekt-Variablen für die betroffenen Dateien und Tabellen setzen, statt mit Activeworkbook/ActiveSheet zu arbeiten. Und man muss darauf achten, dass bei den Range- und Cells-Methoden immer vollständig zum Tabellenblatt-Objekt verwiesen wird.
Bei dir fehlt im Teil "ActiveWorkbook.ActiveSheet.Range(Cells(2, 1), Cells(loLetzte2, inLetzte))"
bei den beiden Cells-Ausdrücken die Rreferenz zu ActiveWorkbook.ActiveSheet., was dann zu Problemen führen kann.
Ich würde dein Makro wie folgtumschreiben, damit immer vollstänig referenziert wird.
Empfehlenswert bei solchen Dateiausleseaktionen ist es meistens auch, die Quelldateien schreibgeschützt zu öffnen und ohne speichern wieder zu schliessen
Gruß
Franz
Sub zusammenfuegen()
Dim strDateiname As String
Dim wksZiel As Worksheet, wbkQuelle As Workbook, wksQuelle As Worksheet
Dim loLetzte1 As Long
Dim loLetzte2 As Long
Dim inLetzte As Integer
Application.ScreenUpdating = False
strDateiname = Dir(ThisWorkbook.Path & "\*.xls")
Set wksZiel = ThisWorkbook.Worksheets("Tabelle1")
Do While strDateiname  ""
If strDateiname  ThisWorkbook.Name Then
Set wkbquelle = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & strDateiname)
Set wksQuelle = ActiveSheet 'ggf. = wkbQuelle.Worksheets(1)
loLetzte1 = wksZiel.UsedRange.SpecialCells(xlCellTypeLastCell).Row
With wksQuelle
loLetzte2 = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
inLetzte = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
.Range(.Cells(3, 1), .Cells(loLetzte2, inLetzte)).Copy _
Destination:=wksZiel.Cells(loLetzte1 + 1, 1)
End With
wkbquelle.Close True
End If
strDateiname = Dir
Loop
Set wkbquelle = Nothing: Set wksQuelle = Nothing: Set wksZiel = Nothing
Application.ScreenUpdating = True
End Sub

Anzeige
AW: VBA Mastertabelle erstellen
27.07.2013 17:54:05
WalterK
Hallo Franz,
besten Dank für Deine Ausführungen bzw. Deine Hilfe.
So läufts perfekt!
Servus, Walter

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige