Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
988to992
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
988to992
988to992
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Kopieren aus Tabellen ohne Select

Kopieren aus Tabellen ohne Select
30.06.2008 22:29:00
edie
Hallo zusammen,
habe den nachfolgenden Code geschrieben, den ich gerne
optimieren würde.
Aus den 3 Tabellen "Licht", "Energie" und "Intensität" die
letze ganze Zeile in die Tabelle "Ergebnisse" kopieren ab A6
nacheinander. Ohne Select wäre es sicherlich besser.

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("Licht")
Set wksB = Sheets("Energie")
Set wksC = Sheets("Intensität")
Set wksD = Sheets("Ergebnisse")
lz = Range("B65536").End(xlUp).Row
Application.ScreenUpdating = False
On Error Resume Next
wksA.Activate
Rows(lz).Select
Selection.Copy
wksD.Range("A6").PasteSpecial
wksB.Activate
Rows(lz).Select
Selection.Copy
wksD.Range("A6").Offset(1, 0).PasteSpecial
wksC.Activate
Rows(lz).Select
Selection.Copy
wksD.Range("A6").Offset(2, 0).PasteSpecial
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub


Hat jemand eine Idee und könnte helfen?
Besten Dank im Voraus und schöne Grüße

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren aus Tabellen ohne Select
30.06.2008 22:33:42
{Boris}
Hi,
ungetestet:
wksB.Rows(lz).Copy wksD.Range("A6").Offset(1, 0)
Grüße Boris

AW: Kopieren aus Tabellen ohne Select
30.06.2008 22:45:24
edie
Hallo Boris,
es sieht jetz so aus:

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
Application.ScreenUpdating = False
On Error Resume Next
wksA.Activate
wksA.Rows(lz).Copy wksGes.Range("A6")
wksB.Activate
wksB.Rows(lz).Copy wksGes.Range("A6").Offset(1, 0)
wksC.Activate
wksC.Rows(lz).Copy wksGes.Range("A6").Offset(2, 0)
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub


Ohne das wksA.Activate, wksB.Activate und wksC.Activate
funktioniert es nicht.
Vielen Herzlichen Dank.
Grüße

Anzeige
AW: es funktionier, besten Dank
30.06.2008 22:53:52
edie
Hallo Boris,
es auch ohne wksA.Activate, wksB.Activate und wksC.Activate
Noch einmal vielen Dank und Grüße

AW: Kopieren aus Tabellen ohne Select
30.06.2008 23:03:20
Erich
Hallo Edie,
die Activate-Methoden brauchst du nicht!
Diesen Code habe ich getestet:

Option Explicit  ' immer zu empfehlen!
Sub Zusammenfassung()
Dim wksA As Worksheet
Dim wksB As Worksheet
Dim wksC As Worksheet
Dim wksGes As Worksheet
Dim lz As Long
Set wksA = Sheets("Energie")
Set wksB = Sheets("Licht")
Set wksC = Sheets("Intensität")
Set wksGes = Sheets("Ergebnisse")
lz = wksA.Range("B65536").End(xlUp).Row   ' lz von Tab. wksA
Application.ScreenUpdating = False
'On Error Resume Next         so ist das ziemlich gefährlich!
wksA.Rows(lz).Copy wksGes.Range("A6")
wksB.Rows(lz).Copy wksGes.Range("A6").Offset(1, 0)
wksC.Rows(lz).Copy wksGes.Range("A6").Offset(2, 0)
'Application.CutCopyMode = False                überflüssig
Application.ScreenUpdating = True
End Sub

In deinem Code war nicht klar, auf welchem Blatt lz bestimmt wird.
Mit "Option Explicit" hättest du sofort bemerkt, dass du wksD deklariert und belegt, aber wksGes verwendet hast.
(Ich hoffe, ich habe das richtig interpretiert...)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
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

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige