Bloqueo automático de celdas

Tavo tengo el siguiente código
Sub bloqueo()
If Range("a1").Value <> Empty Then
Range("A1").Select
ActiveSheet.Unprotect "hola"
Selection.Locked = True
Selection.FormulaHidden = False
ActiveSheet.Protect "hola", DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
End Sub
Tengo un formulario y quiero que cada vez que digite un dato esta se vaya bloqueando, pero las celdas no son en orden es decir por ej: a1, b2, c4, y así sucesivamente, y son muchas las celdas que debo bloquear imaginate unas 500 celdas y para cada una tener que copiar todo el bloque anterior lo hice así pero es muy engorroso ocupa mucho espacio, y me toco en varios módulos, y ademas entre tantas celdas me equivoque y me producía un error, Quiero, si se puede hacer algo más sencillo y fácil de controlar. El siguiente código es el que me activa el tiempo para que la macro actúe. Ademas si se puede que cuando la macro actúe la celda activa no se devuelva a la celda que bloquea si no que me quede en donde voy introduciendo los datos... O bien también seria que las celdas llenadas se bloqueen cuando el libro se cierre, podríamos ver las dos opciones.
codigo que me activa la macro bloqueo
Private Sub worksheet_change(ByVal target As Range)
calcular = Now + TimeValue("00:00:05")
Application.OnTime calcular, "bloqueo"
End Sub
Tavo te agradezco la colaboración que me puedas brindar ya que desde hace tiempo necesito instalar este código en las historias clínicas

1 respuesta

Respuesta
1
Se me ocurre que podrías utilizar el evento Change del Worksheet donde estás introduciendo los datos. No en la macro sino en la hoja.
De esta manera, si tienes algo como:
Private Sub Worksheet_Change(ByVal Target As Range)
    Target.Locked = True
    Target.FormulaHidden = True
End Sub

Esto se ejecutará en cuanto ingreses un dato desde el formulario. Claro, debes desproteger la hoja antes de ingresar el dato y puedes protegerla de nuevo desde el formulario o desde el evento Change dependiendo de cómo lo necesites.
Hola tavo, hice lo que me hiciste pero me aparece una ventana con un error 1004
En tiempo de ejecucuion. No se puede asignar la propiedad locked de la clase range y quede ahí. Tienes alguna otra opción de como solucionar este error.
Tienes razón, supongo que la hoja está progetida por lo que no puedes cambiar el formato de una celda protegida. Quizás haciendo esto:
Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveSheet.Unprotect "abc"
    Target.Locked = True
    Target.FormulaHidden = True
    ActiveSheet.Protect "abc"
End Sub

Reemplaza "abc" por la clave que tienes en tu Hoja, o bórralo si no quieres tener clave.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas