Tengo 2 hojas de trabajo (llamémoslas hoja de trabajo1 y hoja de trabajo2) en 1 libro de trabajo (un único archivo de Excel). workseet1 contiene 2 columnas: Descripción y Columna (2 opciones: Completado y En progreso).
DescripciónyEstado(Completado/En progreso)
Mi requisito: cuando selecciono el estado = En curso (de la lista desplegable), toda esta fila debe moverse a la segunda hoja de trabajo, es decir, la hoja de trabajo2. De modo que me quedan solo las filas que tienen el estado = Completado en la hoja de trabajo. Es decir, la hoja de trabajo1 contendrá solo filas que tengan Estado = Completado y la segunda hoja de trabajo, es decir, la hoja de trabajo2 contendrá solo filas que contengan Estado = En curso.
En el momento en que selecciono cualquier opción del Estado, se mueve a su hoja de trabajo respectiva.
tia
Respuesta1
No estoy del todo seguro de por qué desea dividir sus datos, pero puede usar el Worksheet_Change()
evento en VBA para lograr lo que busca.
esto va en elHojas de trabajo completadasCódigo:
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
esto va en elHojas de trabajo en progresoCódigo:
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
Esto entra en unMódulo estándar:
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