1

Ich habe ein Arbeitsblatt mit allen meinen Projekten aufgelistet. Wenn ich eine Zeile (Projekt) als "Finaled" aus einem Dropdown in Spalte D markiert habe, möchte ich, dass die gesamte Zeile in mein Arbeitsblatt "Final" verschoben wird und dauerhaft auf diesem Arbeitsblatt verbleibt.Wie kann ich in Excel eine Datenzeile bedingt abschneiden und dauerhaft in ein anderes Arbeitsblatt verschieben?

Ich habe grundlegende Programmierkenntnisse und haben mit diesem Makro ...

Sub Finaled() 
    Dim i, LastRow 

    Sheets("FINALED").Range("A2:Z500").ClearContents 
    For i = 19 To LastRow 
    If Sheets("ACTIVE").Cells(i, "D").Value = "Finaled" Then 
    Sheets("ACTIVE").Cells(i, "D").EntireRow.Copy Destination:=Sheets("FINALED").Range("A" & Rows.Count).End(xlUp).Offset(1) 
    End If 
    Next i 
    End Sub 

kommen ... aber das funktioniert nicht genau, wie ich es will. Das erste Problem ist, dass es nur die Informationszeile kopiert, und wenn ich die Zeile manuell aus meinem Hauptarbeitsblatt lösche, verliere ich beim nächsten Ausführen des Makros die ursprünglich kopierten Datenzeilen auf meinem Finaled-Arbeitsblatt. Ich möchte, dass die Datenzeile vollständig abgeschnitten und in mein Arbeitsblatt "Final" verschoben wird und dort dauerhaft gespeichert wird.

Zweitens, kann diese Bewegung automatisch passieren, sobald ich die Zeile als "finaled" aus meiner Dropdown-Liste in Spalte D markieren? Oder muss ich das Makro jedes Mal manuell ausführen?

+0

Was meinen Sie mit 'es kopiert nur die Informationszeile, und wenn ich Zeilen aus dem ursprünglichen Arbeitsblatt lösche, sind die Daten auf dem Finale Blatt verloren '? Wenn Sie Daten in das endgültige Blatt kopieren, sind die Daten vorhanden und sollten nicht verschwinden, wenn Sie etwas auf einem anderen Blatt löschen. Für Ihre Abschnittsfrage sollten Sie sich das [Worksheet_Change-Ereignis] (https://msdn.microsoft.com/en-us/library/office/ff839775.aspx) ansehen. – Ralph

+0

Was ich meine ist die Reihe von Daten ist im Wesentlichen "kopiert und eingefügt" auf meinem finaled Arbeitsblatt, und es bleibt immer noch auf meinem Hauptarbeitsblatt. Ich möchte nicht, dass die Datenzeile kopiert wird. Ich möchte sie aus meinem Hauptarbeitsblatt ausschneiden und in mein endgültiges Arbeitsblatt eingeben. 2. Teil, sobald es auf meinem finalisierten Arbeitsblatt erscheint, habe ich es manuell aus meinem Hauptarbeitsblatt gelöscht. Aber wenn ich das Makro erneut ausführe (da sich die Datenzeile nicht mehr auf dem Hauptarbeitsblatt befindet), wird das beendete Arbeitsblatt aktualisiert und die Datenzeilen, die ich aus dem Hauptarbeitsblatt gelöscht habe, erscheinen nicht mehr auf dem endgültigen Arbeitsblatt. –

Antwort

1

im VBA-Editor, doppelklicken Sie auf Ihrem Arbeitsblatt ACTIVE genannt, und das wird das Arbeitsblatts des Codemodul bringen (nicht, dass es aus einem Standardmodul unterscheidet):

Worksheet code module

Dann in diesem Blatt Modul , den Code unten ein:

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim wsData As Worksheet 
    Dim wsDest As Worksheet 
    Dim rngCheck As Range 
    Dim rngChanged As Range 
    Dim ChangedCell As Range 
    Dim rngMove As Range 

    Set wsData = Me 
    Set wsDest = Me.Parent.Sheets("FINALED") 
    Set rngCheck = wsData.Range("D19", wsData.Cells(wsData.Rows.Count, "D").End(xlUp)) 
    If rngCheck.Row < 19 Then Exit Sub 'No data 

    Application.EnableEvents = False 
    On Error GoTo ReEnableEvents 

    Set rngChanged = Intersect(rngCheck, Target) 

    If Not rngChanged Is Nothing Then 
     For Each ChangedCell In rngChanged.Cells 
      If LCase(Trim(ChangedCell.Value)) = "finaled" Then 
       Select Case (rngMove Is Nothing) 
        Case True: Set rngMove = ChangedCell 
        Case Else: Set rngMove = Union(rngMove, ChangedCell) 
       End Select 
      End If 
     Next ChangedCell 

     If Not rngMove Is Nothing Then 
      With rngMove.EntireRow 
       .Copy 
       wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues 
       .Delete xlShiftUp 
      End With 
     End If 
    End If 

ReEnableEvents: 
    Application.EnableEvents = True 
End Sub 

Nun, wenn Sie eine Zelle in der Spalte D auf „finaled“ ändern wird es automatisch in das FINALED Arbeitsblatt bewegt werden.

Auch der Grund, warum Sie Ihre Daten auf dem Arbeitsblatt verloren, war wegen dieser Zeile: Sheets("FINALED").Range("A2:Z500").ClearContents die ich nicht aufgenommen habe, weil ich glaube nicht, dass Sie das wirklich wollen.

+0

Also, das funktionierte großartig und ich war so aufgeregt, bis ich es schloss und es wieder öffnete. Ich speicherte es und als ich das Excel-Dokument wieder öffnete, war der "beendete" Tab komplett leer. Ich hatte tatsächlich 27 Projekte "finalisiert", die vom aktiven Tab entfernt wurden und auf dem finalen Tab erscheinen, so wie ich es wollte. Irgendwelche Ideen, warum sie verschwanden, als ich das Dokument wieder öffnete? –

+0

Es gibt keinen Grund, dass sie verschwunden wären, es sei denn, Sie hätten ein anderes Makro, das auf 'workbook_open',' workbook_close' oder 'sheet_activate' oder ähnlichem ausgeführt wird, das die Daten gelöscht hätte (wie die oben erwähnte' ClearContents'-Zeile). – tigeravatar

Verwandte Themen