Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Über Schaltfläche Zeilen in ein Anderes Blatt verschieben

Forumthread: Über Schaltfläche Zeilen in ein Anderes Blatt verschieben

Über Schaltfläche Zeilen in ein Anderes Blatt verschieben
15.05.2024 15:01:15
Micha1184
Hallo in die Runde,

ich hab hier schon ein sehr gutes Makro für meine Anwendung gefunden.
Nur leider bekomm ich das nicht in einem Modul zum laufen so das ich es mit einer Schaltfläche verbinden kann.

ZIEL: Wenn in einer Zelle der Spalte J "Erledigt" drin steht sollen diese Zeilen aus Blatt 1 in Blatt 2 durch drücken der Schaltfläche verschoben werden.

Das Erledigt wird nicht unbedingt immer nach einander stehen also (Zeile: 1;2;5;7;8;25) d.h. es muss auch noch nach dem Erledigt gesucht werden.

Es wäre nett wenn mir hier jemand Helfen könnte.

Ich versuch gerade schon sehr viel aber ich bekomm es leider nicht so umgebaut das ich es als Modul verwenden kann.
Und mit der Suchfunktion hab ich zwar nen Ansatz aber glaub der haut auch nicht so hin wie gedacht:

So nun das was ich habe:
Verschieben der Zeile:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim loLetzteQuelle As Long
Dim loLetzteZiel As Long

Application.ScreenUpdating = False

If Target.Column = 10 Then
cancel = True
loLetzteQuelle = Cells(Rows.Count, 2).End(xlUp).Row
loLetzteZiel = Worksheets("ERLEDIGT").Cells(Rows.Count, 1).End(xlUp).Row + 1

If Target.Row > 1 And Target.Row loLetzteQuelle + 1 Then
If Target Is Nothing Then Exit Sub
If Target = "a" Then
Application.EnableEvents = False
Range(Cells(Target.Row, 1), Cells(Target.Row, 10)).Copy
Worksheets("ERLEDIGT").Cells(loLetzteZiel, 1).PasteSpecial xlPasteValues
Cells(Target.Row, 11).Copy Worksheets("ERLEDIGT").Cells(loLetzteZiel, 11)
Application.CutCopyMode = False

With Worksheets("ERLEDIGT").Range("A" & loLetzteZiel & ":K" & loLetzteZiel)
With .Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With .Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
End With

Target.EntireRow.Delete shift:=xlUp

loLetzteZiel = Worksheets("ERLEDIGT").Cells(Rows.Count, 1).End(xlUp).Row

With Worksheets("ERLEDIGT").Columns("A:K")
Worksheets("ERLEDIGT").Sort.SortFields.Clear
Worksheets("ERLEDIGT").Sort.SortFields.Add Key:=Range("A2:A" & loLetzteZiel), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End With

With ActiveWorkbook.Worksheets("ERLEDIGT").Sort
.SetRange Range("A1:K" & loLetzteZiel)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
.SortFields.Clear
End With
Application.EnableEvents = True
End If
End If
End If

Application.ScreenUpdating = True
End Sub



Suchen ob "Erledigt" in Spalte J

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rngZelle As Range
If Not Intersect(Target, Columns(10)) Is Nothing Then
If Target.Cells(1) = "Erledigt" Then
Application.EnableEvents = False
For Each rngZelle In Target
If Not Intersect(rngZelle, Columns(10)) Is Nothing Then
..... ( Bin mir nicht sicher wie es hier weiter gehen könnte)
End If
Next rngZelle
Application.EnableEvents = True
End If
End If
End Sub


Danke euch schon mal für die Unterstützung
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Über Schaltfläche Zeilen in ein Anderes Blatt verschieben
15.05.2024 15:03:55
{Boris}
Hi,

Du zeigst uns hier einen Ereigniscode, der auf Veränderungen bei einer Eingabe reagiert. Den kann man so nicht einer Schaltfläche zuweisen.
Lad bitte Deine Beispieldatei hoch - ansonsten wird Dir das kaum einer bearbeiten (können).

VG, Boris
AW: Über Schaltfläche Zeilen in ein Anderes Blatt verschieben
15.05.2024 23:27:52
Piet
Hallo

ein mordslanger Code, da bekomme ich ja "Schwindelanfälle" bei der Länge!
Mein Code schämt sich daneben, weil er so kurz ist! Fragt sich ob er das richtige Ergebnis bringt?
Beim Löschen musst du übrigens rückwärts programmieren, mit Forwärts Schleife geht das nicht!

mfg Piet

Sub Erledigte_verschieben()

Dim j As Long, lz1 As Long
Dim Erld As Worksheet, x As Long
Set Erld = Worksheets("Erledigt")

With Worksheets("Tabelle2")
'LastZell in Tabelle2 und Erledigt suchen
lz1 = .Cells(Rows.Count, 1).End(xlUp).Row
x = Erld.Cells(Rows.Count, 1).End(xlUp).Row + 1

'Erledigte Zeilen rückwärts verschieben
For j = lz1 To 2 Step -1
If LCase(.Cells(j, 10)) = "erledigt" Then
.Rows(j).Copy Erld.Rows(x)
.Rows(j).Delete shift:=xlUp
x = x + 1
End If
Next

'Erledigt Tabelle Spalte A sortieren
Erld.Range("A2:K" & x).Sort Key1:=Erld.Range("A2"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortNormal
End With
End Sub
Anzeige
AW: Über Schaltfläche Zeilen in ein Anderes Blatt verschieben
15.05.2024 15:17:05
Micha1184
Hier noch die BSP Datei.
https://www.herber.de/bbs/user/169487.xlsm

Und vielleicht noch Warum ich das mit der Schaltfläche möchte.
Die Datei wird von vielen Personen benutzt.
Es gibt Regelmäßige Abstimmungen wo die Liste herangezogen wird.
Jedoch sollen die Erledigten erst nach der Rücksprache verschoben werden und nicht gleich beim eintragen.

Anzeige
AW: Über Schaltfläche Zeilen in ein Anderes Blatt verschieben
16.05.2024 09:19:13
Micha1184
Danke für die Unterstützung.

Hab noch etwas gesucht und was gefunden was mir geholfen hat.

Das Forum soll natürlich auch nicht Tod Sterben.
Hier das Ergebnis:

Sub SucheUndAusschneiden()

Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
Dim letzteZeile As Long
Dim i As Long
Dim zielZeile As Long

' Definiere Quell- und Zielblatt
Set wsQuelle = ThisWorkbook.Sheets("Aktionsplan") ' Name des Quellblatts einfügen
Set wsZiel = ThisWorkbook.Sheets("Erledigte Aufgaben") ' Name des Zielblatts einfügen

' Bestimme die letzte Zeile in Spalte J der Quelltabelle
letzteZeile = wsQuelle.Cells(wsQuelle.Rows.Count, "J").End(xlUp).Row
zielZeile = 8 ' Zeile, in die die gefundenen Zeilen im Zielblatt eingefügt werden sollen

' Schleife durch die Zeilen der Quelltabelle rückwärts
For i = letzteZeile To 1 Step -1
' Überprüfe, ob der Zellenwert "Erledigt" in Spalte J ist
If wsQuelle.Cells(i, "J").Value = "Erledigt" Then
' Schneide die ganze Zeile aus und füge sie in das Zielblatt ein
wsQuelle.Rows(i).Cut Destination:=wsZiel.Rows(zielZeile)
zielZeile = zielZeile + 1 ' Gehe zur nächsten Zeile im Zielblatt
' Lösche die ausgeschnittene Zeile in der Quelltabelle
wsQuelle.Rows(i).Delete
End If
Next i
End Sub


Anzeige
AW: Über Schaltfläche Zeilen in ein Anderes Blatt verschieben
16.05.2024 17:49:57
Piet
Hallo Micha

freut mich das wir dir weiterhelfen konnten, dein Code sieht sauber aus. Alle Achtung. Kleiner Tipp von mir.

Wenn du die Zielzeile immer auf 8 setzt, werden bereits vorhanden Daten im "Erledigt" Sheet überschrieben.
Besser ist es auch dort die LastZell über Ziel.Cells().End(xlUp).Row +1 zu suchen. Direkt die nächste leere Zeile!

mfg Piet
Anzeige
AW: Über Schaltfläche Zeilen in ein Anderes Blatt verschieben
15.05.2024 16:07:23
{Boris}
Hi,

auch wenn das erstmal sicher nicht Deine Wunschantwort ist: Ich kann Dir nur davon abraten, Zeilen in ein anderes Blatt zu verschieben.
Du hast doch eine wunderbare Liste - die kann man jederzeit auch mit dem Autofilter nutzen - und man kann sie zudem nach allen Regeln der Kunst auswerten (wenn man denn möchte).

Mit einem weiteren Blatt schaffst Du Dir irgendwann Folgeprobleme.

VG, Boris
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige