Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1256to1260
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

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

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

145 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige