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

Zeile in eine andere Tabelle kopieren VBA

Zeile in eine andere Tabelle kopieren VBA
04.01.2018 10:36:26
Lia
Hallo liebes Forum,
Ich möchte eine Zeile in der fertig steht mit Knopfdruck auf einen Button oder vielleicht automatisch mit worksheet change sobald fertig reingeschrieben wird in eine neue Tabelle (Tabelle2) übertragen.
Ich habe etwas gefunden was funktioniert, aber immer wenn ich auf den Button klicke markiert er mir ohne Grund die ganze 2 Zeile?
Und wieso in ZeileMax eine 25 drin steht versteh ich auch nicht.
With Tabelle3
ZeileMax = .UsedRange.Rows.Count
n = 1
For Zeile = 2 To ZeileMax
If Tabelle3.Cells(Zeile, 6).Value = "fertig" Then
Tabelle3.Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
n = n + 1
End With
...
Danke und lg,
Lia

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile in eine andere Tabelle kopieren VBA
04.01.2018 10:41:29
Werner
Hallo Lia,
in welche Spalte schreibst du "fertig" rein?
Soll die entsprechende Zeile dann im Zielblatt jeweils unten angehängt werden?
Gruß Werner
AW: Zeile in eine andere Tabelle kopieren VBA
04.01.2018 10:50:43
Lia
In die Spalte F (ist eine DropDownListe).
Genau jede Zeile in der fertig steht soll in die andere Tabelle kopiert werden.
Ich löse das Ereignis mit einem Button klick aus.
*Falls es noch zusätzlich geht, wäre es toll wenn die Zeile aus der Quelltabelle rausgelöscht wird,(sobald auf den Button geklickt wird). Dh Button klicken - Zelle löschen und gleichzeitig in andere Tabelle kopieren.
Danke und lg lia
AW: Zeile in eine andere Tabelle kopieren VBA
04.01.2018 10:55:29
Werner
Hallo Lia,
hier als Ereignismakro, ohne Buttonklick. Sobalt in Spalte F erledigt eingetragen wird, wird die entsprechende Zeile ins Zielblatt kopiert und im Quellblatt gelöscht.
Ich bin davon ausgegangen, dass sowohl im Quellblatt als auch im Zielblatt in Zeile 1 Überschriften vorhanden sind und der Datenbereich in Zeile 2 beginnt.Private Sub Worksheet_Change(ByVal Target As Range)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim loLetzte As Long
If Target.Column = 6
If Target.Count = 1 Then
If UCase(Target.Value) = "ERLEDIGT" Then
With Worksheets("Tabelle2") 'Blattname Zielblatt anpassen
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
Rows(Target.Row).Copy .Rows(loLetzte + 1)
Rows(Target.Row).Delete
End With
End If
End If
End If
End Sub
Gruß Werner
Anzeige
AW: Zeile in eine andere Tabelle kopieren VBA
04.01.2018 11:01:17
Lia
er zeigt bei mir target.column rot und als Syntaxfehler an :/
AW: Zeile in eine andere Tabelle kopieren VBA
04.01.2018 11:04:20
Lia
Da tut sich leider nichts :-(
Lad mal die Mappe hoch...
04.01.2018 11:08:55
Werner
Hallo Lia,
...in der es nicht funktioniert.
Brauch nur ein paar Datensätze, die du ja anonymisieren kannst.
Gruß Werner
AW: Zeile in eine andere Tabelle kopieren VBA
04.01.2018 11:44:32
Werner
Hallo Lia,
keine Ahnung was du machst. Schau dir mal die Beispielmappe an. Im Tabelleblatt1 mal in Spalte F erledigt eintragen.
https://www.herber.de/bbs/user/118668.xlsm
Gruß Werner
AW: Zeile in eine andere Tabelle kopieren VBA
04.01.2018 11:50:34
Lia
Sorry Werner ich bin total verwirrt.
Schau mal ich würde es gerne mit dem Buttonklick machen. Also wenn ich auf das Button klicke sollen die Zeilen in denen abgeschlossen steht in die andere Tabelle kopiert werden und gleichzeitig aus der Tabelle gelöscht werden.
Jetzt habe ich mal ein paar "Stopper" eingelegt um zu gucken was in den einzelnen Variablen drin steht. Bei dem n= n+1 markiert er mir die Zeilen von 1-3 warum auch immer. Das Kopieren funktioniert. Aber warum in ZeileMax 25 drin steht verstehe ich auch nicht. Ich möchte das er alle Zeile bis 10000 oder so betrachtet.

Sub test()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
Dim Value As String
With Tabelle1
ZeileMax = .UsedRange.Rows.Count
n = 1
Value = Cells(11, 6).Value
For Zeile = 1 To ZeileMax
If .Cells(Zeile, 6).Value = "abgeschlossen" Then
.Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
n = n + 1
End If
Next Zeile
End With
End Sub

Anzeige
AW: Zeile in eine andere Tabelle kopieren VBA
04.01.2018 12:42:31
Werner
Hallo Lia,
Public Sub Erledigt()
Dim loLetzte As Long, loLetzte1 As Long, i As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle2") 'Zielblatt anpassen
loLetzte1 = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
End With
With Worksheets("Tabelle1") 'Quellblatt anpassen
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = loLetzte To 2 Step -1
If UCase(.Cells(i, 6).Value) = "ERLEDIGT" Then
.Rows(i).Copy
Worksheets("Tabelle2").Rows(loLetzte1).Insert 'Zielblatt anpassen
.Rows(i).Delete
loLetzte1 = loLetzte1 + 1
End If
Next i
End With
Application.ScreenUpdating = True
End Sub
Gruß Werner
Anzeige
was hat mich denn da geritten
04.01.2018 13:29:00
Werner
Hallo Lia,
insert braucht es doch gar nicht
Public Sub Erledigt()
Dim loLetzte As Long, loLetzte1 As Long, i As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle2") 'Zielblatt anpassen
loLetzte1 = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
End With
With Worksheets("Tabelle1") 'Quellblatt anpassen
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = loLetzte To 2 Step -1
If UCase(.Cells(i, 6).Value) = "ERLEDIGT" Then
.Rows(i).Copy Worksheets("Tabelle2").Rows(loLetzte1)  'Zielblatt anpassen
.Rows(i).Delete
loLetzte1 = loLetzte1 + 1
End If
Next i
End With
Application.ScreenUpdating = True
End Sub
Gruß Werner
Anzeige
AW: was hat mich denn da geritten
04.01.2018 13:35:26
Lia
Danke für deine Antworten.
Also entweder bekomme ich es nicht hin oder ich bin einfach nur verwirrt.
Es funktioniert nicht. Habe ich es vielleicht im falschen Tabellenblatt, ich weiß es nicht..
hänge hier jetzt schon seit mehreren Stunden an der Sache. Finde deinen Code super. Aber habe nochmal selbst was ausprobiert, was für mich etwas einfacher verständlich ist..
Sub test()
Dim i As Long
With Workbooks(test.xlsm).Worksheets("Tabelle1")
For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row + 1
If .Cells(i, "F") = "erledigt" Then
.Rows(i).Copy Destination:=Tabelle2.Rows.End(xlUp).Row + 1
End If
Next
End With
End Sub
aber ich glaube das ist auch alles falsch. Also so langsam weiß ich nicht mehr weiter
DANKE.
Anzeige
AW: was hat mich denn da geritten
04.01.2018 13:38:48
Werner
Hallo Lia,
der Code gehört in ein allgemeines Modul und nicht ins Tabellenblatt.
Und warum machst du ständig neue Beiträge auf zum gleichen Problem?
Wenn ein Problem nicht gelöst sein sollte, dann kann man den Beitrag auf offen, also nicht gelöst, stellen. Schau dir mal das Kontrollkästchen neben dem Passwortfeld und die Beschreibung dazu an.
Gruß Werner
AW: was hat mich denn da geritten
04.01.2018 13:54:21
Werner
Hallo Lia,
obwohl du mit mittlerweile drei Beiträgen zum gleichen Problem zum "Rundumschlag" ausgeholt hast, habe ich jetzt trotzdem mal deinen Code vom Beitrag anepasst -wenn dir meiner nicht gefällt.
Sub test()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
n = Tabelle2.UsedRange.Rows.Count + 1
If Tabelle2.Cells(1, 1) = "" Then n = 1
With Tabelle1
ZeileMax = .UsedRange.Rows.Count
For Zeile = ZeileMax To 1 Step -1
If .Cells(Zeile, 6).Value = "fertig" Then
.Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
.Rows(Zeile).Delete
n = n + 1
End If
Next Zeile
End With
End Sub
Gruß Werner
Anzeige
AW: was hat mich denn da geritten
04.01.2018 14:39:00
Lia
Das war nicht böse gemeint. Vielen Dank Werner es funktioniert ! Ich werd bekloppt.
Habe eine Frage: Das Step -1 , habe ich nie genutzt was genau macht es?
LG und vielen vielen Dank,
Lia
AW: was hat mich denn da geritten
04.01.2018 15:18:41
Werner
Hallo Lia,
die Schleife läuft rückwärts von der letzten belegten Zelle zu Zeile 1 deshalb das -1. Das muss bei Schleifen die irgendwelche Werte löschen immer so gemacht werden, weil sonst Daten "übersprungen" werden.
Beispiel anhand des Codes wenn die Schleife von oben nach unten läuft:
In Zelle F10 und F11 steht "fertig"
dein Schleifenzähler Zeile kommt zu Zeile 10, hat also den Wert 10
Zelle F10 wird geprüft - dort steht "fertig" die Zeile wird also gelöscht
alle anderen Zeilen rücken durch das Löschen jetzt um eins nach oben
F11 wird also zu F10
der Schleifenzähler Zeile steht immer noch in Zeile 10
Zeile 10 wurde aber schon bearbeitet und der Zäher wird um 1 erhöht
Zeile hat jetzt den Wert 11 und prüft jetzt die Zelle F11
dort steht aber jetzt nicht mehr "fertig" da durch das vorherigen Löschen der Zeile F11 nach F10 hochgerückt ist
somit werden Zeilen sozusagen "übersprungen" wenn die Schleife von oben nach unten läuft
Gruß Werner
Anzeige
AW: was hat mich denn da geritten
05.01.2018 08:56:06
Lia
Super danke für den Tipp!!
Gruß Lia
Gerne u. Danke für die Rückmeldung. o.w.T.
05.01.2018 09:38:02
Werner
Korrektur
04.01.2018 13:35:54
Werner
Hallo Lia,
hier muss es natürlich "FERTIG" heißen
If UCase(.Cells(i, 6).Value) = "ERLEDIGT" Then

also so:
If UCase(.Cells(i, 6).Value) = "FERTIG" Then
Gruß Werner

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige