Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeilen verschieben wenn Erledigt.

Zeilen verschieben wenn Erledigt.
23.06.2020 08:23:09
Ylmz-006
Hallo Zusammen,
Ich hoffe kann mir einer helfen.
Ich habe eine intelligente Tabelle "B" bis "Y"
wie kann ich die VBA ändern, so wenn in der Spalte "M" der Status definiert bzw. "Erledigt" gesetzt wird, soll die ganze Zeile ins Tabelle2 "Archiv " verschoben werden.
Wenn mann aus versehen auf die Schaltfläche "Erledigt" geklickt hat und das Projekt doch wieder zurück muss, soll der zeile wieder zurück in die tabelle "Aktuell versoben werden".
Vielen Dank im Voraus..
---------------
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' abgeschlossener Punkt verschieben
Dim rngBereich                As Range
Dim rngZelle                  As Range
Dim loLetzte                  As Long
Application.ScreenUpdating = False 'Bildschirmaktualisierung ausschalten
Set rngBereich = Intersect(Target, Range("J:J"))
If Not rngBereich Is Nothing Then
loLetzte = Sheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row           ' letzte belegte  _
in Spalte A (1)
On Error GoTo ErrorHandler
For Each rngZelle In rngBereich
If rngZelle.Value = 1 Then
Range("A" & Target.Row & ":J" & Target.Row).Copy
Sheets("Archiv").Range("A" & loLetzte + 1).PasteSpecial Paste:=xlPasteValues,  _
Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A" & Target.Row & ":J" & Target.Row).ClearContents
Range("A" & Target.Row).FormulaR1C1 = "=ROW(RC1)-ROW(R3C1)"
End If
Next rngZelle
ErrorHandler:
Application.ScreenUpdating = True 'Bildschirmaktualisierung wieder einschalten
If Err Then MsgBox Err.Number & "  " & Err.Description  'Fehlercode und Beschreibung  _
anzeigen
End If
End Sub

Anzeige

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen verschieben wenn Erledigt.
23.06.2020 09:03:51
Luschi
Hallo Ylmz-006,
Ich habe eine intelligente Tabelle "B" bis "Y"

Wenn das so ist, dann sollte man auch die Methoden/Eigenschaften diese Formatvorlage nutzen, und hier hat M$-Excel 'ne ganze Menge im Angebot:
- so muß man nicht mehr die letzte belegte Zeile in der Spalte ermitteln
- da die Eigenschaft 'DataBodyRange' den Datenbereich im Griff hat
- u.v.m.
Wenn Du ein Musterbeispiel mit Demodaten bereitstellst, versuche ich mich daran.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Zeilen verschieben wenn Erledigt.
23.06.2020 09:26:58
volti
Hallo Ylmz,
hier mal eine Idee zur Verfeinerung Deines Codes.
Konnte ich allerdings nicht bis ins letzte testen, da ich jetzt weg muss.
Option Explicit
Option Compare Text
Dim iLastRow As Long
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Target As Range
   '
   ' abgeschlossener Punkt verschieben
   '
 Dim rngBereich                As Range
 Dim rngZelle                  As Range
 Dim loLetzte                  As Long
   '
 Set Target = ActiveCell
  
 Application.ScreenUpdating = False     'Bildschirmaktualisierung ausschalten
  
 Set rngBereich = Intersect(Target, Range("M:M"))
 If Not rngBereich Is Nothing Then
      loLetzte = Sheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte in Spalte A (1)
      On Error GoTo ErrorHandler
      iLastRow = 0
      For Each rngZelle In rngBereich
         If rngZelle.Value Like "erledigt" Then
            iLastRow = rngZelle.Row
            Rows(rngZelle.Row).Copy
            Sheets("Archiv").Range("A" & loLetzte + 1).PasteSpecial Paste:=xlPasteValues, _
            Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            Rows(rngZelle.Row).Delete
         End If
  
      Next rngZelle
      
ErrorHandler:
   Application.ScreenUpdating = True    'Bildschirmaktualisierung wieder einschalten
   If Err Then MsgBox Err.Number & "  " & Err.Description  'Fehlercode und Beschreibung anzeigen
 End If
End Sub
Sub LetztesProjektZurueck()
 Dim loLetzte As Long
 If iLastRow = 0 Then
  iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
 End If
 loLetzte = Sheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte in Spalte A (1)
 Sheets("Archiv").Rows(loLetzte).Copy
 Range("A" & iLastRow).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
 Range("A" & iLastRow).PasteSpecial Paste:=xlPasteValues, _
         Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 Sheets("Archiv").Rows(loLetzte).Delete
End Sub

Viele Grüße aus Freigericht
Karl-Heinz

Anzeige
AW: Zeilen verschieben wenn Erledigt.
23.06.2020 13:30:06
Ylmz-006
Hallo volti,
Danke für dein unterstützung.
Leider funktionniert es nicht ganz. Es erscheind die fehlermeldung "Fehler beim Kompilieren - Mehrfachdeklaration im aktuellen Gültigkeitsbereich"
VG
AW: Zeilen verschieben wenn Erledigt.
23.06.2020 14:23:03
volti
Sorry Ylmz,
hatte es ohne Worksheet_Change getestet und dann vergessen, den Declare rauszunehmen.
Das heißt:
Dim Target As Range muss natürlich weg, da es ja schon in Private Sub Worksheet_Change(ByVal Target As Range) deklariert wurde.
viele Grüße
Karl-Heinz
Anzeige
AW: Zeilen verschieben wenn Erledigt.
23.06.2020 14:26:14
volti
Hi,
hier noch mal neu:
Option Explicit
Option Compare Text
Dim iLastRow As Long
Private Sub Worksheet_Change(ByVal Target As Range)
   '
   ' abgeschlossener Punkt verschieben
   '
 Dim rngBereich                As Range
 Dim rngZelle                  As Range
 Dim loLetzte                  As Long
   '
 Application.ScreenUpdating = False     'Bildschirmaktualisierung ausschalten
  
 Set rngBereich = Intersect(Target, Range("M:M"))
 If Not rngBereich Is Nothing Then
      loLetzte = Sheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte in Spalte A (1)
      On Error GoTo ErrorHandler
      iLastRow = 0
      For Each rngZelle In rngBereich
         If rngZelle.Value Like "erledigt" Then
            iLastRow = rngZelle.Row
            Rows(rngZelle.Row).Copy
            Sheets("Archiv").Range("A" & loLetzte + 1).PasteSpecial Paste:=xlPasteValues, _
            Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            Rows(rngZelle.Row).Delete
         End If
  
      Next rngZelle
      
ErrorHandler:
   Application.ScreenUpdating = True    'Bildschirmaktualisierung wieder einschalten
   If Err Then MsgBox Err.Number & "  " & Err.Description  'Fehlercode und Beschreibung anzeigen
 End If
End Sub
Sub LetztesProjektZurueck()
 Dim loLetzte As Long
 If iLastRow = 0 Then
  iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
 End If
 loLetzte = Sheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte in Spalte A (1)
 Sheets("Archiv").Rows(loLetzte).Copy
 Range("A" & iLastRow).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
 Range("A" & iLastRow).PasteSpecial Paste:=xlPasteValues, _
         Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 Sheets("Archiv").Rows(loLetzte).Delete
End Sub

Viele Grüße aus Freigericht
Karl-Heinz

Anzeige
AW: Zeilen verschieben wenn Erledigt.
23.06.2020 14:42:49
Fred
Hallo Karl-Heinz,
entschuldige wenn ich mich in diesen Beitrag "reinhänge".
den Code
Private Sub Worksheet_Change(ByVal Target As Range)
' abgeschlossener Punkt verschieben
Dim rngBereich                As Range
Dim rngZelle                  As Range
Dim loLetzte                  As Long
Application.ScreenUpdating = False     'Bildschirmaktualisierung ausschalten
Set rngBereich = Intersect(Target, Range("M:M"))
If Not rngBereich Is Nothing Then
loLetzte = Sheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte in Spalte  _
A (1)
On Error GoTo ErrorHandler
iLastRow = 0
For Each rngZelle In rngBereich
If rngZelle.Value Like "erledigt" Then
iLastRow = rngZelle.Row
Rows(rngZelle.Row).Copy
Sheets("Archiv").Range("A" & loLetzte + 1).PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Rows(rngZelle.Row).Delete
End If
Next rngZelle
End Sub()

würde ich (entsprechend verändert) auch gerne nutzen.
Meine Frage:
Wie muss das vba geändert werden, wenn es nicht auf "Eingabe" ausgeführt werden soll, sonder bei Button-Klick.
Gruss
Fred
Anzeige
AW: Zeilen verschieben wenn Erledigt.
23.06.2020 14:53:32
Ylmz-006
Hallo Volti,
Die Erledigte zeilen kann Jetzt auf die Tabelle"Archiv" verschoben werden. Ich kann aber nur eine zeile verschieben bzw. den zweiten erledigten aufgabe wird in die selbe zeile eingefügt. Obwohl die Tabellen identisch sind, werden die zeilen ganz oben auf die Tabelle"Archiv eingefügt.
2. Wie verschiebe ich die zeilen wieder zurück auf die Aktuelle Tabelle?
VG
Anzeige
AW: Zeilen verschieben wenn Erledigt.
23.06.2020 15:35:59
volti
Hallo zusammen,
@Fred:
Für eine Aktivierung per Button kannst Du eine der unten aufgeführten Makros nutzen und die einem Button zuordnen.
Hier ist mir nicht klar, ob nur die gerade aktive Zeile, die mit "erledigt" gekennzeichnet ist verschoben werden soll, oder alle in der Spalte "M" markierten Zeilen verschoben werden sollen.
Probier halt aus, was Dir am besten passt.
@Ylms:
Aufgrund der zunächst fehlenden Datei, stelle ich erst jetzt fest, dass das angepasste Makro so nicht funktionieren kann.
Dieses fügt im Archiv unterhalb des "intelligenten Bereich" ein, also auch außerhalb der Formatierung, außerdem gibt die LetzteZeilenermittlung in Spalte 1 immer nur 1 heraus, weil in Spalte "A" keine Daten sind.
Da Du mit dem Change-Event arbeitest, frage ich mich, ob bei Dir nicht auch eine Einzelabarbeitung (also nicht in Schleife die ganze Spalte "M" durchgehen) besser wäre.
Die letzte verschobene Zeilenposition merkt sich das Programm und kann daher das Projekt wieder zurückschieben.
2. Wie verschiebe ich die zeilen wieder zurück auf die Aktuelle Tabelle?
Wenn Du wirklich mehrere Zeilen wieder zurückschieben willst, wird es aufwändig, denn das muss sich ja irgendwie gemerkt werden.
Außerdem benötigt Du einen Starter hierfür, z.B. einen Button, oder ein Eventmanager im Archiv, z.B. wenn man das "erledigt" wieder weg nimmt.
Wenn Du noch etwas Geduld aufbringst, kann ich versuchen, das in Deine Datei einzubauen. Könnte aber etwas dauern.....
Sub EineZeileInsArchivVerschieben()
 Dim loLetzte As Long
 Application.ScreenUpdating = False     'Bildschirmaktualisierung ausschalten
  
 loLetzte = Sheets("Archiv").Cells(65000, 2).End(xlUp).Row ' letzte belegte in Spalte A
 On Error GoTo ErrorHandler
 
 If ActiveCell.Column = 13 And ActiveCell.Row > 12 Then
 
  iLastRow = 0
  If ActiveCell.Value Like "erledigt" Then
    iLastRow = ActiveCell.Row
    Rows(iLastRow).Copy
    Sheets("Archiv").Range("A" & loLetzte + 1).PasteSpecial Paste:=xlPasteValues, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Rows(iLastRow).Delete
  End If
 End If
 
ErrorHandler:
 Application.ScreenUpdating = True    'Bildschirmaktualisierung wieder einschalten
 If Err Then MsgBox Err.Number & "  " & Err.Description  'Fehlercode und Beschreibung anzeigen
End Sub
Sub MehrereZeilenInsArchivVerschieben()
 Dim rngZelle   As Range
 Dim loLetzte   As Long
 Application.ScreenUpdating = False     'Bildschirmaktualisierung ausschalten
  
 loLetzte = Sheets("Archiv").Cells(65000, 2).End(xlUp).Row ' letzte belegte in Spalte A (1)
 On Error GoTo ErrorHandler
 iLastRow = 0
 
 For Each rngZelle In Range("M:M")
     If rngZelle.Value Like "erledigt" Then
        iLastRow = rngZelle.Row
        Rows(iLastRow).Copy
        Sheets("Archiv").Range("A" & loLetzte + 1).PasteSpecial Paste:=xlPasteValues, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Rows(iLastRow).Delete
        loLetzte = loLetzte + 1
     End If
 Next rngZelle
ErrorHandler:
 Application.ScreenUpdating = True    'Bildschirmaktualisierung wieder einschalten
 If Err Then MsgBox Err.Number & "  " & Err.Description  'Fehlercode und Beschreibung anzeigen
End Sub

Viele Grüße aus Freigericht
Karl-Heinz

Anzeige
AW: Zeilen verschieben wenn Erledigt.
23.06.2020 17:30:34
volti
Hallo Ylmz,
schau mal in die angefügte Mappe, ob es jetzt Deinen Wünschen entspricht.
Da keine Spieldaten drin waren, konnte es nur wenig getestet werden.
Vorgehensweise:
Nach Markierung einer Zeile mittels DropDown als "erledigt" wird die Zeile sofort ins Archiv verschoben und zwar hinten dran als letztes.
Danach könn(t)en weitere verschoben werden.....
Nach Markierung einer Zeile im Archiv mittels DropDown als "Zurück zu Aktuell" wird die Zeile sofort ins Aktuell verschoben und zwar
  • in die ehemalige Zeile im Aktuell, wenn die Reaktivierung direkt wieder erfolgen soll

  • hinten dran als letztes, wenn die Merkung verloren ging oder über den Bereich hinausgeht.

  • Teste es einfach mal:
    https://www.herber.de/bbs/user/138508.xlsm
    viele Grüße
    Karl-Heinz
    Anzeige
    AW: Zeilen verschieben wenn Erledigt.
    24.06.2020 09:10:52
    Ylmz-006
    Hallo Volti,
    Vielen Dank für deine bemühungen.
    Es funktioniert soweit alles bis auf das zurück verschieben die letzte zeile von Archiv nach Aktuell.
    Kann mann diese Methode auch ohne Modul entworfen? damit ich Änderungen vornehmen kann, wenn ich Spalt hinzufüge oder entferne?
    zb. https://www.herber.de/bbs/user/112853.xlsm
    oder wie die Testdatei, nur ohne prozentuale Status? https://www.herber.de/bbs/user/138513.xlsm
    VG
    Anzeige
    AW: Zeilen verschieben wenn Erledigt.
    24.06.2020 14:54:15
    volti
    Hallo,
    hier noch mal ein Versuch mit neuer Denkweise:
    Module sind weg. Code nur noch in Tabellenblättern. Es wird nur die jeweilige Tabelle angesprochen, die man auch erweitern kann.
    Daten werden nach Übertragung sortiert.....
    https://www.herber.de/bbs/user/138530.xlsm
    viele Grüße
    Karl-Heinz
    Anzeige
    AW: Zeilen verschieben wenn Erledigt.
    24.06.2020 18:02:01
    ylmz-006
    Hallo Volti,
    Die letzte Tabelle, die du gesendet hast, war großartig. Eine letzte Sache habe ich noch.
    Was sollte geändert werden, um die Formeln mit auf die andere Tabelle verschieben zu können.
    vielen Dank für deine Unterstützung.
    AW: Zeilen verschieben wenn Erledigt.
    24.06.2020 19:17:28
    volti
    Hallo Ylmz,
    aus der Datei war nicht erkennbar, dass da Formeln drin sind, deshalb werden Werte direkt (ohne Kopieren) übernommen.
    Versuche mal in beiden Makros das .Value durch .FormulaLocal zu ersetzen.
    iTab2.DataBodyRange.Range(sBer2).FormulaLocal = _
    iTab1.DataBodyRange.Range(sBer1).FormulaLocal

    viele Grüße
    Karl-Heinz
    Anzeige
    AW: Zeilen verschieben wenn Erledigt.
    25.06.2020 08:22:04
    Ylmz-006
    Hallo Volti,
    das .Value durch .FormulaLocal zu ersetzen hat nicht geklappt.
    Es schlägt auch fehl, wenn ich den von dir entworfenen Code auf meinen Tabelle einfüge.
    Die zeilen werden zwar verschoben, bekomme aber die Fehlermeldung "Anwendung oder objektdefinierter Fehler aufgetreten". Wo mache ich den Fehler?
    Ich lade die Tabelle mit den Formeln, die ich derzeit verwende.
    Ich würde mich sehr freuen, wenn du den Code zur der Tabelle einfügen kannst.
    https://www.herber.de/bbs/user/138545.xlsm
    Anzeige
    AW: Zeilen verschieben wenn Erledigt.
    25.06.2020 11:12:14
    volti
    Hallo,
    ich sehe keine Formeln in der hochgeladenen Datei und nach Ersetzung FormulaLocal kommt auch kein Fehler.
    VG KH
    AW: Zeilen verschieben wenn Erledigt.
    25.06.2020 12:37:32
    Ylmz-006
    Hallo Volti,
    Ich meinte die Regeln Entschuldigung.
    der Fehler kommt wenn ich die Code in die zuletzt hochgeladene Datei einfüge.
    Nach Ersetzung FormulaLocal konnte nur die Regeln nicht mit verschieben werden.
    VG
    Anzeige
    AW: Zeilen verschieben wenn Erledigt.
    25.06.2020 16:51:10
    volti
    Hallo,
    wenn die Regeln mitsollen, geht das m.W. nur über Kopieren und Einfügen. Dann gehen auch die Formeln mit rüber, so dass z.B. im Archiv
    nicht mehr "Zurück zu Aktuell" zu sehen ist. Deshalb muss das Makro dann auch die Datenüberprüfung (DropDowns) anpassen, so dass die richtigen Einträge wieder zu sehen sind.
    Hier noch mal eine Version, die das alles abdeckt.
    https://www.herber.de/bbs/user/138566.xlsm
    viele Grüße
    Karl-Heinz
    Anzeige
    AW: Zeilen verschieben wenn Erledigt.
    26.06.2020 14:38:44
    Ylmz-006
    Hallo Volti,
    vielen Dank für deine Bemühungen. Ohne deine Hilfe hätte Ich es nicht geschafft.
    Bei der Tabelle bekomme ich auf meine PC beim verschieben der zeilen die Fehlermeldung "excel objekt unterstützt diese eigenschaft oder methode nicht" wenn ich aber auf einem Anderen PC öffne, funktioniert alles normal.
    Hast du ein Tipp für mich voran das liegen könnte?
    VG
    Anzeige
    AW: Zeilen verschieben wenn Erledigt.
    26.06.2020 15:24:27
    volti
    Hallo Ylmz,
    leider habe ich so jetzt keinen Tipp, wieso das nicht geht.
    Bei mir läuft alles soweit ich das erkennen kann. Und wenn es nur auf einem Rechner nicht geht ist die Ferndiagnose fast unmöglich.
    Ggf. mal mit Einzelschritt (F8) durchsteppen und ermitteln, wo genau es hakt. Auch bei welcher Verschiebung (ins Archiv, aus dem Archiv)
    viele Grüße
    Karl-Heinz
    Anzeige
    AW: Zeilen verschieben wenn Erledigt.
    24.06.2020 08:26:26
    volti
    Hallo,
    hier noch mal ein Update. Jetzt nur noch eine kompakte Funktion.....
    Projektdatei.xlsm
    viele Grüße
    Karl-Heinz
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Entdecke relevante Threads

    Schau dir verwandte Threads basierend auf dem aktuellen Thema an

    Alle relevanten Threads mit Inhaltsvorschau entdecken
    Anzeige
    Anzeige

    Infobox / Tutorial

    Zeilen verschieben in Excel, wenn erledigt


    Schritt-für-Schritt-Anleitung

    Um in Excel Zeilen zu verschieben, wenn der Status als "erledigt" markiert wird, kannst Du das folgende VBA-Skript verwenden. Dieses Skript überprüft die Spalte „M“ und verschiebt die gesamte Zeile zur Tabelle „Archiv“, wenn der Wert „erledigt“ eingegeben wird.

    1. Öffne Deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.
    2. Wähle das Arbeitsblatt aus, in dem Du die Funktion implementieren möchtest (z.B. „Aktuell“).
    3. Füge den folgenden Code in das Codefenster ein:
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim rngBereich As Range
        Dim rngZelle As Range
        Dim loLetzte As Long
    
        Application.ScreenUpdating = False ' Bildschirmaktualisierung ausschalten
        Set rngBereich = Intersect(Target, Range("M:M"))
    
        If Not rngBereich Is Nothing Then
            loLetzte = Sheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte Zeile in Spalte A
            On Error GoTo ErrorHandler
    
            For Each rngZelle In rngBereich
                If rngZelle.Value Like "erledigt" Then
                    Rows(rngZelle.Row).Copy
                    Sheets("Archiv").Range("A" & loLetzte + 1).PasteSpecial Paste:=xlPasteValues
                    Rows(rngZelle.Row).Delete
                End If
            Next rngZelle
        End If
    
    ErrorHandler:
        Application.ScreenUpdating = True ' Bildschirmaktualisierung wieder einschalten
        If Err Then MsgBox Err.Number & "  " & Err.Description ' Fehlercode und Beschreibung anzeigen
    End Sub
    1. Schließe den VBA-Editor und teste die Funktion, indem Du in Spalte „M“ den Wert „erledigt“ eingibst.

    Häufige Fehler und Lösungen

    • Fehler beim Kompilieren - Mehrfachdeklaration im aktuellen Gültigkeitsbereich: Dieser Fehler tritt auf, wenn Du eine Variable zweimal deklariert hast. Stelle sicher, dass Du in Deinem Code keine doppelten Deklarationen hast.

    • Anwendung oder objektdefinierter Fehler aufgetreten: Dieser Fehler kann auftreten, wenn der Zielbereich (z. B. „Archiv“) nicht korrekt referenziert ist. Überprüfe, ob das Arbeitsblatt „Archiv“ existiert und korrekt benannt ist.


    Alternative Methoden

    Falls Du die Zeilen nicht automatisch beim Eingeben von „erledigt“ verschieben möchtest, kannst Du auch einen Button in Excel hinzufügen, der beim Klicken die Zeilen verschiebt. Hier ist ein Beispiel für solch ein Makro:

    Sub ZeileInsArchivVerschieben()
        Dim loLetzte As Long
        Dim rngZelle As Range
    
        Application.ScreenUpdating = False
        loLetzte = Sheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row
    
        For Each rngZelle In Range("M:M")
            If rngZelle.Value Like "erledigt" Then
                Rows(rngZelle.Row).Copy
                Sheets("Archiv").Range("A" & loLetzte + 1).PasteSpecial Paste:=xlPasteValues
                Rows(rngZelle.Row).Delete
            End If
        Next rngZelle
    
        Application.ScreenUpdating = True
    End Sub

    Du kannst diesen Code einem Button zuordnen, um die erledigten Aufgaben zu verschieben.


    Praktische Beispiele

    1. Beispiel für das Verschieben von Aufgaben: Angenommen, Du hast eine Liste von Projekten und markierst die erledigten mit „erledigt“ in Spalte „M“. Das oben genannte Skript verschiebt diese Zeilen automatisch in das „Archiv“.

    2. Rückverschieben: Du kannst ein ähnliches Makro erstellen, um die Zeilen aus dem „Archiv“ zurück in die aktuelle Tabelle zu verschieben. Hier ist ein einfaches Beispiel:

    Sub ZeileZurueckverschieben()
        Dim loLetzte As Long
        Dim rngZelle As Range
    
        Application.ScreenUpdating = False
        loLetzte = Sheets("Aktuell").Cells(Rows.Count, 1).End(xlUp).Row
    
        For Each rngZelle In Sheets("Archiv").Range("A:A")
            If rngZelle.Value Like "Zurück zu Aktuell" Then
                Rows(rngZelle.Row).Copy
                Sheets("Aktuell").Range("A" & loLetzte + 1).PasteSpecial Paste:=xlPasteValues
                Rows(rngZelle.Row).Delete
            End If
        Next rngZelle
    
        Application.ScreenUpdating = True
    End Sub

    Tipps für Profis

    • Nutze die Funktion „DataBodyRange“ in intelligenten Tabellen, um die letzte belegte Zeile dynamisch zu ermitteln, was die Codewartung erleichtert und die Effizienz steigert.
    • Achte darauf, dass Du beim Verschieben von Zeilen die Formatierungen beibehältst, insbesondere wenn Du mit Formeln arbeitest. Erwäge, .FormulaLocal anstelle von .Value zu verwenden, wenn Du Formeln verschieben möchtest.
    • Teste Deine VBA-Skripte gründlich in einer Kopie Deiner Datei, um Datenverlust zu vermeiden.

    FAQ: Häufige Fragen

    1. Kann ich das Skript anpassen, um mehrere Zeilen gleichzeitig zu verschieben? Ja, das Skript kann modifiziert werden, um alle Zeilen mit dem Status „erledigt“ auf einmal zu verschieben, wie im Beispiel oben beschrieben.

    2. Wie kann ich die Zeilen zurück in die aktuelle Tabelle verschieben? Du kannst ein separates Makro erstellen, das beim Klicken auf einen Button die Zeilen aus dem „Archiv“ zurück in die aktuelle Tabelle verschiebt. Das Skript dafür wurde ebenfalls oben bereitgestellt.

    3. Funktioniert dieses VBA-Skript in allen Excel-Versionen? Das Skript sollte in den meisten modernen Excel-Versionen (z.B. Excel 2013 und neuer) funktionieren. Achte darauf, dass die richtigen Referenzen gesetzt sind.

    4. Was ist, wenn ich die Zeilen verschieben möchte, ohne sie zu löschen? Wenn Du die Zeilen nicht löschen möchtest, kannst Du die Zeilen einfach kopieren und dann die Originalzeilen in der aktuellen Tabelle belassen. Entferne einfach die Zeile Rows(rngZelle.Row).Delete aus dem Code.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige