Macro para bloquear celdas después de escribir

Necesito por favor me pudieran ayudar en que necesito una macro con la cual al escribir en una celda esta automáticamente pase a bloqueada para no modificar su contenido después de desplazarme a otra obviamente, el rango en que necesito realizar esto es de a1:z1000.
De antemano se que para que funcione debo de tener todas las celdas bloqueadas y de la misma manera proteger la hoja con contraseña.
Respuesta
3

Paramisolo vi en un post aquí en todo expertos, que regalaste una macros donde se bloquean las celdas automáticamente al escribir sobre ellas. La pregunta es: ¿En esa se le podrá aderir que se pueda escribir 3 veces en la celda y después que se bloquee esto por la cuestión de que te pudieras equivocar? Espero haber formulado bien mi pregunta. Gracias y saludosHola para mi solo vi en un post aquí en todo expertos, que regalaste una macros donde se bloquean las celdas automáticamente al escribir sobre ellas. La pregunta es: ¿En esa se le podrá aderir que se pueda escribir 3 veces en la celda y después que se bloquee esto por la cuestión de que te pudieras equivocar?

1 respuesta más de otro experto

Respuesta
12
Estando en tu hoja primero desprotege todas las celdas y después pulsas Alt+F11 y se abrirá el editor de VBA en el lado izquierdo verás el árbol de objetos de que se compone tu libro, si estas trabajando en la Hoja1 (por ejemplo) haces doble click sobre ella y se abrirá un modulo en blanco en el lado derecho, en ese módulo pegas este código:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:Z1000")) Is Nothing Then
Exit Sub
Else
If Target.Value <> "" Then
Target.Select
ActiveSheet.Unprotect "excel"
Selection.Locked = True
End If
ActiveSheet.Protect "excel", DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells
End If
End Sub
Guardas el archivo y ya lo tienes, puedes probarlo, escribiendo en cualquier celda desde la A1 hasta la Z1000 la celda se quedará bloqueada, pero podrás escribir en otras celdas. La contraseña la cambias esta en negrita y te he puesto excel.
Si te ha servido finalizas y puntúas la respuesta.
Es un código demasiado bueno, me sirve a la perfección, sin embargo ahora que lo pruebo me encuentro que si quiero modificar tengo que desproteger la hoja (algo lógico) pero si borro por ejemplo toda una fila me manda un error "13 en tiempo de ejecución" y me resalta la linea de:
If Target.Value <> "" Then
Abra forma de corregir este error.
Y otra, se podrá comenzar que en vez de desbloqueadas, estén todas bloqueadas.
Gracias.
Vamos a pensar un poco, tu quieres introducir datos "según me has dicho" y que cuando pongas un dato y saltes a otra celda la que has puesto valores se quede bloqueada.
Si bloqueamos todas y protegemos la hoja ¿Cómo vas a seguir introduciendo datos si están todas bloqueadas? Según pides ahora. A esta proposición Negativo se empieza con todas desbloqueadas.
Efectivamente la macro es muy buena, tan buena que no pide la intervención del usuario para que se ejecute, tu tan solo escribes y la macro bloquea la celda y la hoja, tu vuelves a escribir y la macro desbloquea previamente para aceptar el dato y acto seguido vuelve a bloquear la celda y la hoja.
El error te aparece porque yo le he puesto en la macro que para que actúe tiene que haber un valor en la celda para que puedas moverte por tus celdas sin introducir ningún valor pero cuando introduces un valor la bloquee. Si después de bloquear, tu a mano desproteges la hoja y borras los valores estos toman el valor de vacío y entonces te avisa en esa linea si la ceda esta vacía... error
Volvamos a analizar si no pongo la condición de que haya un valor en la celda cada vez que te sitúes en una celda y saltes a otra sin poner un valor la celda quedaría bloqueada y protegida la hoja, entonces me dirías "es que no pongo ningún valor y cambio de celda y esta queda bloqueada... y así no me es funcional" (lógico)
Si por la razón que sea te ves en la necesidad de desbloquear la hoja y borrar algún dato, te aparecerá el error pulsas arriba en el icono de cuadrado que sirve para detener la ejecución de la macro, cierras VBA y listo.
Si analizas lo que te he explicado verás que está perfecta y que otros cambios no serían funcionales.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas