Quiero bloquear las celdas una vez escritas, como puedo hacerlo?

Estoy haciendo un calendario de citas de hora, y quiero bloquear las celdas cada vez que le usuario escriba sus datos, intente hacerlo en base a una pregunta que hicieron sobre lo mismo, pero me sale error "1004", dice "no se puede asignar la propiedad locked en la clase range".

2 respuestas

Respuesta
3

H   o la:

Para bloquear las celdas, realiza los siguientes pasos:

1. Si tienes la hoja protegida, desproteje la hoja.

2. Seleccionar todas las celdas

3. Entra al menú Inicio, Formato, Formato de celdas, en la ceja Proteger, desmarca la casilla Bloqueada, presiona Aceptar

4. Pon la siguiente macro en los eventos de tu hoja

Private Sub Worksheet_Change(ByVal Target As Range)
'---
'   Por.Dante Amor
'---
    If Not Intersect(Target, Range("A4:F100")) Is Nothing Then
        If Target.Count > 100 Then Exit Sub
        ActiveSheet.Unprotect "abc"
        For Each c In Target
            c.Locked = True
        Next
        ActiveSheet.Protect "abc", DrawingObjects:=False, _
            Contents:=True, Scenarios:=False, _
            AllowFormattingCells:=True, AllowFormattingColumns:=True, _
            AllowFormattingRows:=True, AllowSorting:=True, _
            AllowFiltering:=True, AllowUsingPivotTables:=True
    End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
  4. En el panel del lado derecho copia la macro

En la macro tienes el texto "abc", cambia el password por la palabra que desees.


En la macro tienes esta línea:

If Not Intersect(Target, Range("A4:F100")) Is Nothing Then

Significa que en el rango de celdas de A4 a F100 se bloqueará la celda después de capturar un dato.

Si quieres cambiar el rango a columnas, por ejemplo:

If Not Intersect(Target, Range("B:G")) Is Nothing Then

O si quieres que aplique en toda la hoja:

If Not Intersect(Target, Cells) Is Nothing Then

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
Respuesta
3

.06.03.17

Buenos días, Felipe

Asumiendo que la hoja está protegida con celdas habilitadas para la carga, prueba con la siguiente rutina para que bloquee la celda cuando se le ingrese dato.

Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y en el panel de la izquierda busca la hoja donde quieres que esto ocurra. Da doble click sobre ella. (Otra forma de llegar a este punto es hacer click derecho sobre la solapa de esta hoja y elegir la opción "Ver Código)

Allí pega el siguiente procedimiento de VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
'---- Variables modificables ----
'=== FELIPE, modifica estos datos de acuerdo a tu proyecto:
    PassProtec = "VEGA" ' Clave para proteger la hoja
    RangoProtect = "B4:G2000" ' rango a proteger luego de escribir
'---- fin Variables
'
'---- inicio de rutina:
'
If Not Application.Intersect(Range(RangoProtect), Target) Is Nothing Then
    If Len(Target) > 0 Then
        ActiveSheet.Unprotect PassProtec
            Target.Locked = True
        ActiveSheet.Protect PassProtec
    End If
End If
End Sub

Como verás, al principio del código hay un par de variables  para que las reemplaces por los valores que quieras usar en tu planilla. Es decir: puedes cambiar la clave conque proteges la hoja y el rango donde quieres que funcione.

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas