Ich habe 2 Arbeitsblätter (nennen wir sie Arbeitsblatt1 und Arbeitsblatt2) in 1 Arbeitsmappe (einzelne Excel-Datei). Arbeitsblatt1 enthält 2 Spalten: Beschreibung und Spalte (2 Auswahlmöglichkeiten: Abgeschlossen und In Bearbeitung).
BeschreibungUndStatus(Abgeschlossen/In Arbeit)
Meine Anforderung: Wenn ich den Status = In Bearbeitung (aus der Dropdown-Liste) auswähle, muss diese gesamte Zeile in das zweite Arbeitsblatt, also Arbeitsblatt2, verschoben werden. So bleiben mir nur die Zeilen mit dem Status = Abgeschlossen im Arbeitsblatt. Das heißt, Arbeitsblatt1 enthält nur Zeilen mit dem Status = Abgeschlossen und das zweite Arbeitsblatt, also Arbeitsblatt2, enthält nur Zeilen mit dem Status = In Bearbeitung.
Sobald ich eine beliebige Option aus dem Status auswähle, wird sie in das entsprechende Arbeitsblatt verschoben.
TIA
Antwort1
Ich bin nicht ganz sicher, warum Sie Ihre Daten aufteilen möchten, aber Sie können das Worksheet_Change()
Ereignis in VBA verwenden, um Ihr Ziel zu erreichen.
Dies geht in dieAusgefüllte ArbeitsblätterCode:
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
Dies geht in dieArbeitsblätter in BearbeitungCode:
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
Dies geht in eineStandardmodul:
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