Obtener valores de celdas antes de que cambie

Tengo una tabla que consta de filas en grupos de dos
la superior es el horario cambiado
la inferior es el horario normal del trabajador
en la columna e hay una celda con lista de validación con valores "normal" "cambiado" y se activa la fila superior o inferior según se elija.
Lo que quiero es que el valor de las celdas de la fila inferior (horario normal) pasen a la superior (horario cambiado) al cambiar la celda de validación a "cambiado"
Y si activo en la celda de validación "normal" me limpie toda la fila del horario cambiado.

El código que tengo es este:

Dim oldValue1 As Variant
Dim oldValue2 As Variant
Dim oldValue3 As Variant
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
oldValue1 = Range("$G" & Target.Row + 1).Value
oldValue2 = Range("$Z" & Target.Row + 1).Value
oldValue3 = Range("$AA" & Target.Row + 1).Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.ScreenUpdating = False
If Target.Column = 5 And Target.Value = "NORMAL" Then
Range("$G" & Target.Row).Value = ""
ElseIf Target.Value = "CAMBIADO" Then
Range("$G" & Target.Row).Value = oldValue1
Range("$Z" & Target.Row).Value = oldValue2
Range("$AA" & Target.Row).Value = oldValue3
End If
End Sub

Por un lado no me sale limpiar las celdas del horario cambiado que seria el rango Range(("$Z" & Target.Row),("$BL" & Target.Row))
Y por otro me sube el valor pero si cambio varias veces de normal a cambiado pierde el subir los valores.
Me pueden orientar un poco

1 Respuesta

Respuesta
1

Creo que lo he conseguido... al menos no le encuentro fallo

Dim oldValue1 As Variant
Dim oldValue2 As Variant
Dim oldValue3 As Variant
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    oldValue1 = Range("$G" & Target.Row + 1).Value
    oldValue2 = Range("$Z" & Target.Row + 1).Value
    oldValue3 = Range("$AA" & Target.Row + 1).Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.ScreenUpdating = False
If Target.Column = 5 Then
Y = ActiveCell.Value
Select Case Y
Case "NORMAL"
        Range("$G" & Target.Row).Value = ""
        Range(("$Z" & Target.Row), ("$BL" & Target.Row)) = ""
Case "CAMBIADO"
        Range("$G" & Target.Row).Value = oldValue1
        Range("$Z" & Target.Row).Value = oldValue2
        Range("$AA" & Target.Row).Value = oldValue3
End Select
End If
End Sub

El código funciona... pero hay veces, y no entiendo porque le da por fallar y no coge los valores.

No sucede siempre, pero no se relacionarlo con algún evento.

No localizo el posible error.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas