Macros para no poder cambiar datos de un rango y si se intenta cambiar regresar al valor predeterminado

Tengo un rango en la columna A

A10:A100 y en cada fila hay numero del 1 al 100 de igual forma...

La hoja esta bloqueada pero solo esa columna no lo esta (por que así lo necesito)

Lo que me hace falta es que ese rango en sus celdas que tienen los números de 1 al 100 no se puedan cambiar... Osea que si alguien pone algo por error o por ocio la celda me regrese al valor original para no afectar el archivo...

1 Respuesta

Respuesta
1

Puedes bloquear esa columna y cada vez que vayas a escribir en ella, desde una macro, desproteges la hoja, escribes en la columna y vueles a proteger; esto lo veo menos complicado que tener el alguna parte el valor anterior y restaurarlo cada que se modifica la celda, porque como bien sabes, una vez que ejecutas una macro, ya no tienes el dato anterior en la memoria, es decir, ya no puedes utilizar el "deshacer".

Es que esa columna no esta bloqueada por que uso un código.. en esa columna

Entonces como tienen que dar clic a esa columna (ES la de PRODUCTOS de mi archivo que envíe) pueden modificar datos y no quiero que lo modifiquen.

Este es el código para la hoja productos.

Ya funciona para que den click en el producto (clo B) y no en la clave (col A), de esta manera la clave, queda protegida.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Act.Por.Dante Amor
    'End
    If Intersect(Target, Columns("B")) Is Nothing Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    If Target.Row < 5 Then Exit Sub
    cantidad = InputBox("Si estás seguro, captura la cantidad:", "Seleccionaste: " & Range("B" & Target.Row))
    If cantidad = 0 Or cantidad = "" Then Exit Sub
    Application.ScreenUpdating = False
    existe = False
    '
    Set h2 = Sheets("NUEVO SERVICIO A DOMICILIO")
    For I = 18 To 24
        If h2.Cells(I, "F") = "" Then
            existe = True
            Exit For
        End If
    Next
    If existe = False Then
        MsgBox "Ya no hay filas para ingresar productos.", vbCritical, "ERROR"
        Exit Sub
    End If
    'desprotejo
    h2.Unprotect "28021990"
    h2.Cells(I, "G") = Cells(Target.Row, "B") 'producto
    h2.Cells(I, "L") = Cells(Target.Row, "C") 'precio
    h2.Cells(I, "F") = cantidad
    h2.Protect "28021990"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(False, False) = "B2" Then
        Application.ScreenUpdating = False
        ActiveSheet.Unprotect "28021990"
        If ActiveSheet.FilterMode Then ShowAllData
        Application.EnableEvents = False
        Target.Value = "*" & Target.Value & "*"
        Application.EnableEvents = True
        'si existe algun error de uso lo ignora o salta al siguiente error
        On Error Resume Next
        'BD dinamica lista para efectuar el filtro avanzado en el mismo lugar, desde B1 hasta D2
        u = Range("B" & Rows.Count).End(xlUp).Row
        Range("B4:E" & u). AdvancedFilter 1, Range("B1"). CurrentRegion
 'autoajusta toda fila usada
        Cells. Rows. AutoFit
        'autoajusta toda columna usada
        Cells. Columns. AutoFit
        'activamos la actualización de la pantalla
        Columns("A").Locked = True
        Columns("B").Locked = False
        Range("B1, B4").Locked = True
        ActiveSheet.Protect "28021990"
        Application.ScreenUpdating = True
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas