Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1764to1768
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

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

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
AW: Zeilen verschieben wenn Erledigt.
23.06.2020 09:51:03
Ylmz-006
Hallo Luschi,
Die Datei ist hochgeladen.
https://www.herber.de/bbs/user/138494.xlsm
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
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
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
    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
    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
    Anzeige
    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
    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
    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
    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
    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

    14 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige