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

Forumthread: Objekdefinierter Fehler: Range Objekt

Objekdefinierter Fehler: Range Objekt
Heiko
Hallo zusammen,
ich blick gerade nicht durch:
Ich moechte per getOpenFilename mit multiselect mehrere Dateien oeffnen, eine nach der anderen, und die Daten aus Spalte 1 und 2 (bei der ersten Datei), danach Daten aus Spalte 2 in ein neues Sheet kopieren und zwar in die erste freie Spalte...
Leider bleibt der Code haengen mit "Anwendungs- oder Objektdefinierter Fehler" wegen der Range(Cells(x,y), Cells(x,y)) Geschichte.
Irgendwie habe ich die Workbooks.activeSheet.range... falsch definiert. Hab aber gerade keine Ahnung, wie's richtig heissen muss...
Kann mal jemand in den Code reinschauen?
Vielen Dank im Voraus,
Heiko
Sub append()
Dim thisWKB     As Workbook
Dim sourceFile  As Workbook
Dim nData       As Integer
Dim numFiles    As Integer
Dim fileToOpen  As Variant
Dim i           As Integer
Dim nextFree    As Integer
fileToOpen = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , "Select files to open", _
_
, True)
If TypeName(fileToOpen) = "Boolean" Then Exit Sub
numFiles = UBound(fileToOpen)
Set thisWKB = ThisWorkbook
For i = 1 To numFiles
Workbooks.Open fileToOpen(i)
Set sourceFile = Workbooks(Dir(fileToOpen(i)))
nData = sourceFile.ActiveSheet.Cells(Rows.count, 1).End(xlUp).Row
nextFree = thisWKB.ActiveSheet.Cells(1, Columns.count).End(xlToLeft).Column + 1
If i = 1 Then
sourceFile.ActiveSheet.Range(Cells(1, 1), Cells(nData, 2)).Copy thisWKB.ActiveSheet. _
Range(Cells(1, 1), Cells(nData, 2))
Else
sourceFile.ActiveSheet.Range(Cells(1, 2), Cells(nData, 2)).Copy thisWKB.ActiveSheet. _
Range(Cells(1, nextFree), Cells(nData, nextFree))
End If
Workbooks(Dir(fileToOpen(i))).Close
Next i
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Objekdefinierter Fehler: Range Objekt
17.04.2012 22:40:20
Dieter
Hallo Heiko,
du musst bei
thisWKB.ActiveSheet.Range(Cells(1, 1), Cells(nData, 2))
auch vor Cells den Blattbezug setzen, also z.B. so
thisWKB.ActiveSheet.Range(thisWKB.ActiveSheet.Cells(1, 1), thisWKB.ActiveSheet.Cells(nData, 2))
Anderenfalls bezieht sich Cells auf das gerade aktive Blatt.
Etwas eleganter sieht das mit Objektvariablen aus:
Sub append()
Dim thisWKB     As Workbook
Dim sourceFile  As Workbook
Dim nData       As Integer
Dim numFiles    As Integer
Dim fileToOpen  As Variant
Dim i           As Integer
Dim nextFree    As Integer
Dim wsS As Worksheet
Dim wsT As Worksheet
fileToOpen = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , _
"Select files to open", , True)
If TypeName(fileToOpen) = "Boolean" Then Exit Sub
numFiles = UBound(fileToOpen)
Set thisWKB = ThisWorkbook
Set wsT = thisWKB.ActiveSheet
For i = 1 To numFiles
Workbooks.Open fileToOpen(i)
Set sourceFile = Workbooks(Dir(fileToOpen(i)))
Set wsS = sourceFile.ActiveSheet
nData = wsS.Cells(wsS.Rows.Count, 1).End(xlUp).Row
nextFree = wsT.Cells(1, Columns.Count).End(xlToLeft).Column + 1
If i = 1 Then
wsS.Range(wsS.Cells(1, 1), wsS.Cells(nData, 2)).Copy _
wsT.Range(wsT.Cells(1, 1), wsT.Cells(nData, 2))
Else
wsS.Range(wsS.Cells(1, 2), wsS.Cells(nData, 2)).Copy _
wsT.Range(wsT.Cells(1, nextFree), wsT.Cells(nData, nextFree))
End If
Workbooks(Dir(fileToOpen(i))).Close
Next i
End Sub
Viele Grüße
Dieter
Anzeige
noch ne Variante
18.04.2012 11:40:50
Erich
Hi Heiko,
das könnte auch schon ausreichen:

Option Explicit
Sub append3()
Dim arrToOpen As Variant, wsT As Worksheet
Dim lngCol As Long, i As Integer, lngQ As Long
arrToOpen = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , _
"Select files to open", , True)
If TypeName(arrToOpen) = "Boolean" Then Exit Sub
Set wsT = ThisWorkbook.ActiveSheet
lngCol = 2
Application.EnableEvents = False
For i = 1 To UBound(arrToOpen)
Workbooks.Open arrToOpen(i)
With ActiveSheet
lngQ = .Cells(.Rows.Count, 1).End(xlUp).Row
If i = 1 Then .Cells(1, 1).Resize(lngQ).Copy wsT.Cells(1, 1)
.Cells(1, 2).Resize(lngQ).Copy wsT.Cells(1, lngCol)
End With
ActiveWorkbook.Close False
lngCol = lngCol + 1
Next i
Application.EnableEvents = True
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
Vielen Dank!
19.04.2012 04:05:00
Heiko
Super!
Vielen Dank!
Werde beide Versionen ausprobieren. Obwohl mir zunaechst die von Dieter vertaendlicher ist.
Gruesse, heiko
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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