-->
Imagen cortesía de Freeimages
Jonn_Rosales me preguntaba en Twitter sobre cómo podría hacer para bloquear ciertas celdas en Excel, cuando aún el usuario no ha terminado de rellenar otras.
@RaymundoYcaza hola Ray buen dia, una consulta: puedo bloquear de alguna forma la columna "B" si aun no lleno lo de la columna "A"??— jon (@jonn_rosales) julio 8, 2014
¿Es esto posible?
Pues sí. Como siempre, hay más de una respuesta, pero hoy te daré una de las más simples y con esa base, tu podrás ir experimentando por tu cuenta.
Primero, vas a guardar tu archivo con extensión xlsm.
Luego, en el objeto “Hoja1” vas a insertar el código que te muestro más abajo.
¿Que no recuerdas cómo trabajar con macros?
Entonces pásate de nuevo por la entrada “escribe tu primera macro en Excel”.
¿Listo?
¡Bien! Ahora, vas a insertar el siguiente código dentro de el evento WorkSheet_Change de tu hoja:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(ActiveCell, Range("B1:B10")) Is Nothing Then
If (\[a2\] \= "" Or \[a3\] \= "" Or \[a4\] \= "" Or \[a5\] \= "" Or \[a6\] \= "") And Target.Value <> "" Then
Target.Value \= ""
MsgBox "No has terminado con la columna A. Debes llenar todos los datos antes de continuar.", vbCritical + vbOKOnly, "RaymundoYcaza.com"
End If
End If
End Sub
Cada vez que trates de escribir en cualquier celda de la columna B, dentro del rango B1:B10, Excel borrará cualquier texto que trates de escribir ahí a menos que hayas completado todas las celdas indicadas en la columna A.
Con esta línea, lo que hago es preguntarle a Excel: “¿El cambio se hizo dentro del rango B1:B10?”
Si la respuesta es sí, entonces continúo con la revisión.
Con esta línea estoy preguntando, celda a celda, si está vacía. Es decir, si la celda A2 está vacía o la celda A3 está vacía o la celda A4 está vacía o…
Bueno, ya entiendes la idea.
Si cualquiera de esas condiciones se cumple, entonces proceso a invalidar la acción.
Mucho ojo: También considero que el valor asignado no sea vacío ( "" )
Si no hicieras esto, tu programa caería en un bucle infinito.
Target es el objeto que contiene el valor de la celda que ha cambiado. O mejor dicho, es una referencia a esta celda, por lo que manipular el objeto target, sería casi como estar manipulando la celda misma.
Aquí lo que he hecho es asignarle una cadena vacía en caso de que se cumpla que hay algún dato faltante y con eso obtengo el efecto de “celda bloqueada” que Jonn andaba buscando.
Haz clic en el siguiente botón para obtener el archivo terminado.
A que no pensabas que era tan sencillo, ¿qué dices?
Claro, esta es una validación básica. Ya queda en ti que la mejores y adaptes a tus necesidades.
Cuéntame, ¿cómo y en qué lo has implementado tú?
Te espero en los comentarios.
¡Nos vemos!
[firma]