AW: Kopieren aus Tabellen ohne Select
30.06.2008 23:20:51
Daniel
Hi
ich sehe keinen Grund, warum daß hier nicht funktionieren sollte:
Sub Zusammenfassung()
Dim wksA As Worksheet
Dim wksB As Worksheet
Dim wksC As Worksheet
Dim wksD As Worksheet
Dim lz As Long
Set wksA = Sheets("Energie")
Set wksB = Sheets("Licht")
Set wksC = Sheets("Intensität")
Set wksD = Sheets("Ergebnisse")
lz = Range("B65536").End(xlUp).Row '- hier fehlt auch die Referenzierung auf ein bestimmtes _
Sheet
wksA.Rows(lz).Copy wksGes.Range("A6") '--- wksGes nicht dimesionert - Fehler oder Globale _
Variable ?
wksB.Rows(lz).Copy wksGes.Range("A6").Offset(1, 0)
wksC.Rows(lz).Copy wksGes.Range("A6").Offset(2, 0)
Application.CutCopyMode = False
End Sub
noch ein paar anmerkungen:
- wksGes ist bei dir nicht dimensioniert und auch nicht zugewiesen. Ist das eine globale Variable, die in einen anderen Makro zugewiesen wird oder hast du hier wksD mit wksGes verwechselt? in diesem Fall müsstest du in meinem Code noch wksGes durch wksD ersetzen (oder umgekehrt, je nach belieben)
Arbeitest du mit Option Explicit (sollte immer ganz oben im Modul stehen) ?
Mit Option Explicit vermeidest du solche Verwechlungen, da mit Option Explicit nur deklarierte Variablen vewendet werden dürfen.
- On Error Resume Next sollte man nie so pauschal im Code verwenden.
Besser ist es Fehler durch Abfragen zu vermeiden.
Wenn man es einsetzt, dann nur gezielt für einzelne Zeilen, die einen Fehler erzeugen können und dürfen.
Danach sollte aber sofort wieder "On Error Goto 0" gesetzt werden.
in deinem Fall gibt es aber keinen Grund, warum der Code Fehler erzeugen sollte.
daher diesnt das On Error Resume Next hier nur dazu, eine unsauberer Programmierung zu vertuschen.
ohne einen Stop bei Fehlern ist es ziemlich schwierig, die wahre Ursache ausfindig zu machen.
- bei der Ermittlung von lz ist kein Sheet referenziert, dh. des wird die letzte Zeile vom gerade aktiven Sheet ermittelt und dann dieser Wert für alle verwendet. ob das so richtig ist, kann ich mir kaum vorstellen.
besser wäre es, hier ebenfalls ein Sheet zu referenzieren:
lz = wksA.Range("B65536").End(xlUp).Row
allerdings musst du dir sicher sein, daß lz für alle Sheet gleich ist, sonst musst du es für jedes Sheet seperat ermitteln.
Gruß Daniel