Clever-Excel-Forum

Normale Version: VBA - Copy Destination
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo miteinander,

das Forum nutze ich nun zum erstenmal, falls ich also was falsch mache, bin ich für Hinweise dankbar.

Code:
Sub Kopie()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long

With Tabelle7
ZeileMax = .UsedRange.Rows.Count
n = 1

For Zeile = 1 To ZeileMax

If .Cells(Zeile, 5).Value <> 0 Then

.Rows(Zeile).Copy Destination:=Worksheets("KEEZ Mehrkind").Rows(n)
n = n + 1

End If
Next Zeile
End With
End Sub
Hier seht Ihr meinen Code unter VBA den ich mithilfe des Internets erstellt habe. Ich selber bin leider absoluter Anfänger!

Mein Code zieht sich aus einer Tabelle nur die gefüllten Zeilen und gibt diese in einer anderen Tabelle wieder aus. Leider schaffe ich es nicht dies an einer gewünschten Stelle in meiner Tabelle auszugeben.
Aktuell kopiert er also die Zeilen also nur dort rein, wo Sie in der Ausgangstabelle anfangen. (Sind also B1, B10 und B12 gefüllt, so kopiert er in Tabelle 2 diese Werte in B1, B2 und B3) 
Ich habe versucht meine Zeile:
Code:
.Rows(Zeile).Copy Destination:=Worksheets("KEEZ Mehrkind").Rows(n)

insoweit abzuändern, das ich die Range der Zieltabelle vorgebe:
Code:
.Rows(Zeile).Copy Destination:=Worksheets("KEEZ Mehrkind").Range("B24").Rows(n)

In meinem Beispiel würde ich also gerne die Tabelle ohne Leerzeilen erst ab B24 beginnen lassen.
Leider führt dies zu der Fehlermeldung:

"Laufzeitfehler '1004'" - (ich sehe davon mal ab den gesamten Fehlertext zu kopieren)
Kurz zusammengefasst: Es kann nicht kopiert werden, da der kopierte Bereich und der Bereich des Einfügens unterschiedliche Formen und Größen haben.

Prinzipiell verstehe ich das, allerdings ist meine Tabelle, in die eingefügt wird, leer und auch Formatierungen wie in der Ausgangstabelle lösen das Problem nicht.
Zumal mich verwundert, dass bei meinem Ausgangscode (sprich ohne .Range("B24")) keine Fehlermeldungen kommen.

Ich wäre wirklich sehr sehr sehr dankbar für Hilfe!

Mit freundlichen Grüßen

Tim
Moin!
Eine Zelle (Range("B24")) hat nun mal nur eine Zeile.
Allgemein: Hier eine Schleife zu nehmen, ist das langsamste, was man Excel antuen kann!
Filtere Spalte E nach nichtleer und kopiere ans Ziel B24.
Bei einem Filtrat werden nur die sichtbaren Zellen kopiert.

Gruß Ralf
Kannst du mir da mal einen Anstoß für die Umsetzung geben?

Und auch in diesem Fall muss ich doch einen Beginn vorgeben für das Einfügen, wie mache ich das dann mit einem variabel-großen Bereich und nicht nur einer Zelle?
Meine Ausgangstabelle erstreckt sich von B1:E45 und nach E, wie du schon gesagt hast, lasse ich filter.

Vielen Dank schonmal!
Hallo Tim,

das ist kein Wunder mit der Fehlermeldung, du kopierst schließlich eine ganze Zeile mit 16384 Spalten und möchtest diese in Tabelle2 ab Spalte B einfügen. Und es geht nunmal nicht, 16384 Spalten in 16383 Spalten einzufügen :)

Also entweder kopierst du nur einen bestimmten Bereich, zB
Code:
.Range("A" & Zeile & ":J" & Zeile).Copy Destination:=Worksheets("KEEZ Mehrkind").Range("B" & n)
oder du kopierst zwar die ganze Zeile, musst aber dann auch in Spalte A in Tabelle2 einfügen.

Aber dein Code und deine Beschreibung stimmen irgendwie nicht ganz überein. Zuerst codest du
Code:
.Rows(Zeile).Copy Destination:=Worksheets("KEEZ Mehrkind").Rows(n)
mit der Definition n=1 (also Zeile 1) und dann schreibst du, du willst erst in Zeile 24 einfügen.

Grundsätzlich sollte es aber so schon hinhauen
Code:
Sub Kopie()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long

With Tabelle7
   ZeileMax = .UsedRange.Rows.Count
   n = 1
   
   For Zeile = 1 To ZeileMax
       If .Cells(Zeile, 5).Value <> 0 Then
           .Range("A" & Zeile & ":J" & Zeile).Copy Destination:=Worksheets("KEEZ Mehrkind").Range("B" & n)
           n = n + 1
       End If
   
   Next Zeile
End With
End Sub
n musst du halt anpassen auf die Startzeile die du möchtest. Falls das variabel sein soll, kannst du das ja auch abfragen lassen

Code:
n = Sheets("KEEZ Mehrkind").Cells(Rows.Count).End(xlUp).Offset(1, 0).Row
Zitat:Grundsätzlich sollte es aber so schon hinhauen
Code:
Code:
Sub Kopie()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long

With Tabelle7
   ZeileMax = .UsedRange.Rows.Count
   n = 1
   
   For Zeile = 1 To ZeileMax
       If .Cells(Zeile, 5).Value <> 0 Then
           .Range("A" & Zeile & ":J" & Zeile).Copy Destination:=Worksheets("KEEZ Mehrkind").Range("B" & n)
           n = n + 1
       End If
   
   Next Zeile
End With
End Sub
n musst du halt anpassen auf die Startzeile die du möchtest. Falls das variabel sein soll, kannst du das ja auch abfragen lassen
Wow... so einfach kanns also sein.... danke! Das kommt davon, wenn man von dem was man tut nur begrenzt Ahnung hat:D
Danke!
Zitat:Das kommt davon, wenn man von dem was man tut nur begrenzt Ahnung hat
Komisch, den Satz krieg ich von meiner Frau auch immer wieder zu hören...  :05: