Verschieben von Zeilen zwischen zwei Arbeitsblättern innerhalb einer einzelnen Arbeitsmappe


-1

Ich habe 2 Arbeitsblätter (nennen wir sie Arbeitsblatt1 und Arbeitsblatt2) in 1 Arbeitsmappe (einzelne Excel-Datei). workseet1 enthält 2 Spalten: Description und Column (2 Auswahlmöglichkeiten: Completed und In-Progress).

Beschreibung und Status ( Abgeschlossen / In Bearbeitung )

Meine Anforderung: Wenn ich den Status = In Bearbeitung (aus der Dropdown-Liste) auswähle, muss diese gesamte Zeile in das zweite Arbeitsblatt verschoben werden, d. H. In das Arbeitsblatt2. Damit ich nur noch die Zeilen habe, die im Arbeitsblatt den Status = Abgeschlossen haben. Das heißt, Arbeitsblatt1 enthält nur Zeilen mit Status = Abgeschlossen und das zweite Arbeitsblatt, d. H. Arbeitsblatt2, enthält nur Zeilen mit Status = In Bearbeitung.

Sobald ich eine Option aus dem Status auswähle, wird sie in das entsprechende Arbeitsblatt verschoben.

TIA


Was hast du versucht? Dies ist kein Beitrag Ihrer Forderung und Ihre Arbeit für Sie vor Ort erledigt ...
Solar Mike

Warum? Warum möchten Sie Daten verschieben, wenn sich der Status ändert? Was ist das größere Bild? Sie können Daten basierend auf dem Status in einem Bericht, einem Diagramm oder einem Dashboard zusammenfassen, ohne sie zu verschieben. Das Verschieben von Daten auf verschiedene Arbeitsblätter ist eine schlechte Datenarchitektur. Daten sollten sich auf einem Blatt befinden, dann kann die Berichterstellung auf anderen Blättern erfolgen.
teylyn

Antworten:


1

Nicht ganz sicher, warum Sie Ihre Daten aufteilen möchten, aber Sie können das verwenden Worksheet_Change() Veranstaltung in VBA zu erreichen, was Sie suchen.

Das geht in der Fertige Arbeitsblätter Code:

Private Sub Worksheet_Change(ByVal Target As Range)
    'This goes into your "Completed" worksheet's module

    Dim RngB As Range
    Set RngB = Intersect(Target, Range("B:B"))

    If RngB Is Nothing Then Exit Sub
    Application.EnableEvents = False

    Dim cel As Range, wsInProgress As Worksheet, retVal As Variant

    '!!! Change the worksheet name to whatever it is that moves from your completed
    'worksheet to the in-progress worksheet...
    Dim wsInProgress As Worksheet
    Set wsInProgress = ThisWorkbook.Worksheets("In-Progress")

    For Each cel In RngB.Cells
        Debug.Print cel.Address
        If cel.Value = "In-Progress" Then
            wsInProgress.Rows(nextrow(wsInProgress)) = cel.EntireRow.Value
            cel.EntireRow.Delete
        End If
    Next
    Application.EnableEvents = True
End Sub

Das geht in der In Bearbeitung Arbeitsblätter Code:

Private Sub Worksheet_Change(ByVal Target As Range)
    'This goes into your "In-Progress" worksheet's module

    Dim RngB As Range
    Set RngB = Intersect(Target, Range("B:B"))

    If RngB Is Nothing Then Exit Sub
    Application.EnableEvents = False

    Dim cel As Range, wsInProgress As Worksheet, retVal As Variant

    '!!! Change the worksheet name to whatever it is that moves from your completed
    'worksheet to the in-progress worksheet...
    Dim wsCompleted As Worksheet
    Set wsCompleted = ThisWorkbook.Worksheets("Completed")

    For Each cel In RngB.Cells
        Debug.Print cel.Address
        If cel.Value = "Completed" Then
            wsInProgress.Rows(nextrow(wsCompleted)) = cel.EntireRow.Value
            cel.EntireRow.Delete
        End If
    Next
    Application.EnableEvents = True
End Sub

Das geht in eine Standardmodul :

Public Function nextRow(ByVal ws As Worksheet, Optional ByVal col As Variant = 1) As Long
    nextRow = ws.Cells(ws.Rows.Count, col).End(xlUp).Row + 1
End Function
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.