Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1548to1552
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

VBA Excel komplette Zeile in anderes Blatt kopiere

VBA Excel komplette Zeile in anderes Blatt kopiere
27.03.2017 12:33:05
Schnappauf
Hallo zusammen,
ich bin kompletter Excel Neuling, mein Problem sollte für alle daher relativ easy zu lösen sein.
Es soll eine Spalte in Blatt 1 nach dem Wert/Wort "KML" durchsucht werden, wenn das der Fall ist soll die komplette Zeile in das andere Blatt kopiert werden.
Allerdings entsteht ein Fehler, "Laufzeitfehler 424 Objekt erforderlich".
Hier mal der Code:
Sub KopiereZeile()
Dim objZelle As Object
For Each objZelle In Active.Workbook.Sheets("LOP").Range("D965:D980")
If objZelle.Value = "KML" Then
Active.Workbook.Sheets("LOP").Rows(objZelle).EntireRow.Copy
Active.Workbook.Sheets("K1").Paste
End If
Next
End Sub

In der For Each Zeile entsteht der Fehler.
Vielen Dank schon mal!

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Excel komplette Zeile in anderes Blatt kopiere
27.03.2017 12:48:25
ChrisL
Hi
ActiveWorkbook (ohne Punkt)
cu
Chris
AW: VBA Excel komplette Zeile in anderes Blatt kopiere
27.03.2017 12:48:46
Werner
Hallo,
objZelle ist ein Range-Objekt, dann kannst du es auch gleich als solches deklarieren.
Active.Workbook ist falsch, ohne Punkt ActiveWorkbook.
Sub KopiereZeile()
Dim objZelle As Range
For Each objZelle In ActiveWorkbook.Sheets("LOP").Range("A1:A10")
If objZelle.Value = "KML" Then
objZelle.EntireRow.Copy ActiveWorkbook.Sheets("K1").Range("A1")
End If
Next
End Sub
Wobei du dir so natürlich jedesmal die Daten im Zielblatt überschreibst.
Gruß Werner
AW: VBA Excel komplette Zeile in anderes Blatt kopiere
27.03.2017 13:06:18
Schnappauf
Hallo,
vielen Dank für die schnelle Antwort.
Bei mir entsteht jetzt leider ein Syntax-Fehler...
Ziel ist es insgesamt, Spalte D nach "KML" zu durchsuchen und bei positiven Einträgen die jeweiligen Zeilen untereinander in das andere Blatt zu schreiben.
(Vermutlich entstehen dann Leerzeilen im zweiten Blatt, da KML nicht in jeder Zeile stehen wird, aber das Problem versuch ich dann selbst zu beheben)
Anzeige
AW: VBA Excel komplette Zeile in anderes Blatt kopiere
27.03.2017 13:20:49
Werner
Hallo,
Sub KopiereZeile()
Dim loLetzteQ As Long
Dim loLetzteZ As Long
Dim raZelle As Range
loLetzteQ = Sheets("LOP").Cells(Rows.Count, 4).End(xlUp).Row
loLetzteZ = Sheets("K1").Cells(Rows.Count, 1).End(xlUp).Row + 1
For Each raZelle In ActiveWorkbook.Sheets("LOP").Range("D1:D" & loLetzteQ)
If raZelle.Value = "KML" Then
raZelle.EntireRow.Copy ActiveWorkbook.Sheets("K1").Range("A" & loLetzteZ)
loLetzteZ = loLetzteZ + 1
End If
Next
End Sub
1. Kopierbereich ist jetzt flexibel, die letzte belegte Zelle in Spalte D Quellblatt wird vom Code ermittelt
2. Zielbereich ist jetzt flexibel, letzte belegte Zelle im Zielblatt Spalte A wird vom Code ermittelt und es wird in die nächste freie Zelle kopiert -somit keine Leerzeilen-. Ich bin davon ausgegangen, dass in der ersten Zeile Überschriften stehen.
Gruß Werner
Anzeige
AW: VBA Excel komplette Zeile in anderes Blatt kopiere
27.03.2017 14:29:14
Schnappauf
Wow, richtig gut, das läuft, vielen Dank!!
Vielleicht noch kurz zu meinem Verständnis des Codes:
1.Dimensionieren
2. Festlegen wo nach den Variablen gesucht werden soll
3. Für jeden Bereich in Blatt 1 im Bereich Spalte D bis letzte Zeile nach "KML" suchen
4. Wenn "KML", dann kopiere die ganze Zeile in "K1", hier ab Spalte A bis letzte Zeile
5. Das loletzteZ = loletzte +1 versteh ich noch nicht ganz...
Aber danke schon mal, glaub das reicht für meine erste Frage hier!
AW: VBA Excel komplette Zeile in anderes Blatt kopiere
27.03.2017 14:44:40
Werner
Hallo,
Sub KopiereZeile()
Dim loLetzteQ As Long 'Variable als Long-Wert (Long=Ganzzahl)
Dim loLetzteZ As Long
Dim raZelle As Range 'Variable als Range deklarieren
'Ermitteln der letzten belegten Zelle, Blatt LOP, Spalte D (=4)
'von unten nach oben
loLetzteQ = Sheets("LOP").Cells(Rows.Count, 4).End(xlUp).Row
'Ermitteln der letzten belegten Zelle, Blatt K1, Spalte A (=1)
'von unten nach oben - +1 ergibt dann die erste freie Zelle
loLetzteZ = Sheets("K1").Cells(Rows.Count, 1).End(xlUp).Row + 1
'Schleife über alle Zellen (raZelle) des Blattes LOP, Bereich D1 bis letzte
'belegte Zelle in Spalte D ("D1:D" & loLetzte)
For Each raZelle In ActiveWorkbook.Sheets("LOP").Range("D1:D" & loLetzteQ)
'Wenn Zellinhalt ="KMS" dann...
If raZelle.Value = "KML" Then
'komplette Zeile dieser Zelle kopieren nach Blatt K1, Zelle A erste freie Zeile
raZelle.EntireRow.Copy ActiveWorkbook.Sheets("K1").Range("A" & loLetzteZ)
'da jetzt ja die oben ermittelte erste freie Zeile
'im Zielblatt mit Daten belegt ist (da wurde ja was
'rein kopiert) muss 1 aufaddiert werden um so die nächste
'freie Zeile im Zielblatt zu haben
loLetzteZ = loLetzteZ + 1
End If
'mit nächster Zelle (raZelle
'im Bereich weiter machen
Next
End Sub
Gruß Werner
Anzeige
AW: VBA Excel komplette Zeile in anderes Blatt kopiere
27.03.2017 15:37:54
Schnappauf
Vielen Dank, das habe ich soweit verstanden!
Wenn ich jetzt beim durchsuchen von "KML" nur eine Zelle der gefundenen Spalte in eine andere Zelle des Zielblattes schreiben möchte, müsste das doch über range gehen oder?
D.h:
Sub KopiereZeile()
Dim loLetzteQ As Long
Dim loLetzteZ As Long
Dim raZelle As Range
loLetzteQ = Sheets("LOP").Cells(Rows.count, 4).End(xlUp).Row
loLetzteZ = Sheets("K1").Cells(Rows.count, 1).End(xlUp).Row + 34
For Each raZelle In ActiveWorkbook.Sheets("LOP").Range("D1:D" & loLetzteQ)
If raZelle.Value = "KML" Then
raZelle.Range("J1:J).Copy ActiveWorkbook.Sheets("K1").Range ("M1:M" & loLetzteZ)
loLetzteZ = loLetzteZ + 1
End If
Next
End Sub
ziel ist also durchsuchen nach KML in Spalte D und kopieren von denjenigen Zellen J nach Zellen M im Zielblatt...
Anzeige
AW: VBA Excel komplette Zeile in anderes Blatt kopiere
27.03.2017 16:13:58
Werner
Hallo,
das geht auch ohne kopieren mit einem Offset (=Versatz) z.B. so:
Sub KopiereZeile()
Dim loLetzteQ As Long
Dim loLetzteZ As Long
Dim raZelle As Range
loLetzteQ = Sheets("LOP").Cells(Rows.Count, 4).End(xlUp).Row
loLetzteZ = Sheets("K1").Cells(Rows.Count, 13).End(xlUp).Row + 34
For Each raZelle In ActiveWorkbook.Sheets("LOP").Range("D1:D" & loLetzteQ)
If raZelle.Value = "KML" Then
ActiveWorkbook.Sheets("K1").Range("M" & loLetzteZ).Value = raZelle.Offset(, 6).Value
loLetzteZ = loLetzteZ + 1
End If
Next
End Sub
Allerdings denke ich, dass du dann auch die letzte belegte Zelle im Zielblatt in Spalte M ermitteln solltest, dort willt du die Daten ja hin. Das habe ich im Code mal geändert.
Bescheidene Frage:
Warum hier
loLetzteZ = Sheets("K1").Cells(Rows.Count, 13).End(xlUp).Row + 34

Wenn du das Makro ein zweites, drittes .... mal ausführst, dann hast du jeweils 34 leere Zeilen zwischen den einzelnen eingefügten Datensätzen im Zielblatt.
Ist das so gewollt?
Gruß Werner
Anzeige
AW: VBA Excel komplette Zeile in anderes Blatt kopiere
28.03.2017 11:21:31
Schnappauf
Hallo,
optimal, das klappt alles soweit, danke!
Ich hab jetzt noch eine zweite Frage:
Wenn ich die Reihenfolge beibehalten will, das heißt bei Abfrage eines Wertes auch Leerzellen in das Zielblatt übernehmen möchte, wo muss ich den Code dann ändern?
Sry, verstehe nicht was du meinst. o.w.T.
28.03.2017 11:28:36
Werner
AW: Sry, verstehe nicht was du meinst. o.w.T.
28.03.2017 11:52:23
Schnappauf
Sorry
Im Prinzip möchte ich das gleiche wie beim ersten Code machen, nur dass nach einem anderen Wort gesucht wird und die Leerzeilen jedoch erhalten bleiben sollen.
Sub KopiereZeile()
Dim loLetzteQ As Long
Dim loLetzteZ As Long
Dim raZelle As Range
Dim loLetzteX As Long
Dim loLetzteY As Long
loLetzteQ = Sheets("LOP").Cells(Rows.count, 4).End(xlUp).Row
loLetzteZ = Sheets("Kunden-LOP").Cells(Rows.count, 13).End(xlUp).Row + 1
loLetzteX = Sheets("LOP").Cells(Rows.count, 7).End(xlUp).Row
loLetzteY = Sheets("Kunden-LOP").Cells(Rows.count, 10).End(xlUp).Row + 1
'Durchsucht "LOP" nach "KML", kopiert Comment in "Kunden-LOP"
For Each raZelle In ActiveWorkbook.Sheets("LOP").Range("D1:D" & loLetzteQ)
If raZelle.Value = "KML" Then
ActiveWorkbook.Sheets("Kunden-LOP").Range("M" & loLetzteZ).Value = raZelle.Offset(0, 6). _
Value
loLetzteZ = loLetzteZ + 1
End If
Next
For Each raZelle In ActiveWorkbook.Sheets("LOP").Range("G1:G" & loLetzteX)
If raZelle.Value = "Allgemein" Then
ActiveWorkbook.Sheets("Kunden-LOP").Range("J" & loLetzteY).Value = raZelle.Offset(0, 0). _
Value
loLetzteY = loLetzteY + 1
End If
Next
End Sub
Danke!
Anzeige
AW: Sry, verstehe nicht was du meinst. o.w.T.
29.03.2017 01:59:17
Werner
Hallo,
so wird das nichts. Ich kenne weder die Datenstruktur deines Quellblattes noch die deines Zielblattes. Also kriege ich noch nicht einmal mit raten raus wo du warum welche Leerzeilen beibehalten möchtest.
Stell mal eine Beispielmappe mit Quellblatt und Zielblatt zur Verfügung. Am besten im Zielblatt ein paar Daten händisch so eintragen, wie du es nach dem Makrolauf haben möchtest.
Gruß Werner

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige