Hace bastante que no escribo ningún post en el blog, pero por fin puedo empezar a dedicarle, de nuevo, algo de tiempo... el trabajo hace imposible a veces que nos empleemos en lo que nos gusta.
Intentaré ir poniéndome al día contestando correos antiguos.
Uno de ellos preguntaba por la manera de automatizar el bloqueo de celdas concretas:
Aprenderemos hoy a emplear el método INTERSECT para obtener el cruce de dos o más rangos en un objeto tipo Range; en nuestro caso lo emplearemos para determinar si nuestra celda activa se encuentra dentro de un rango determinado.
La idea consiste en contrastar si nuestra celda activa se halla dentro de un rango previamente determinado, y si es cierta esta premisa forzar el desbloqueo, para tras una posterior protección de la hoja de cálculo, dejarla bloqueada e impedir su modificación o eliminación, tal como pedía el usuario.
Empecemos entonces definiendo cuáles son las celdas que desearemos impedir se modifiquen en el futuro, por ejemplo, el rango de celdas A1:A3, B2 y C3. Con la aplicación del método INTERSECT conseguiremos que cuando se seleccione alguna de dichas celdas de nuestro rango, éstas queden desbloqueadas.
Nuestro código VBA a incluir en una Hoja del Explorador del proyecto dentro del Editor de VBA es:
Sólo nos quedaría forzar la protección de nuestra Hoja de cálculo, lo que conseguiremos con un procedimiento Workbook_BeforeClose que ejecute dicha protección.
Intentaré ir poniéndome al día contestando correos antiguos.
Uno de ellos preguntaba por la manera de automatizar el bloqueo de celdas concretas:
| ...¿Existe alguna posibilidad o alguna macro?, que te permita introducir datos en algunas celdas y una vez introducidas las bloquee automáticamente, por ejemplo al guardar la hoja, de forma que no puedas eliminarlos o modificarlos sin desbloquear la hoja... |
Aprenderemos hoy a emplear el método INTERSECT para obtener el cruce de dos o más rangos en un objeto tipo Range; en nuestro caso lo emplearemos para determinar si nuestra celda activa se encuentra dentro de un rango determinado.
La idea consiste en contrastar si nuestra celda activa se halla dentro de un rango previamente determinado, y si es cierta esta premisa forzar el desbloqueo, para tras una posterior protección de la hoja de cálculo, dejarla bloqueada e impedir su modificación o eliminación, tal como pedía el usuario.
Empecemos entonces definiendo cuáles son las celdas que desearemos impedir se modifiquen en el futuro, por ejemplo, el rango de celdas A1:A3, B2 y C3. Con la aplicación del método INTERSECT conseguiremos que cuando se seleccione alguna de dichas celdas de nuestro rango, éstas queden desbloqueadas.
Nuestro código VBA a incluir en una Hoja del Explorador del proyecto dentro del Editor de VBA es:
Sub worksheet_selectionchange(ByVal target As Range)
If Intersect(ActiveCell, Range("A1:A3,B2,C3")) Is Nothing Then
'La celda activa NO cruza con las celdas del rango
ActiveCell.Locked = True
Else
'La celda activa SI cruza con las celdas del rango
ActiveCell.Locked = False
End If
End Sub
Sólo nos quedaría forzar la protección de nuestra Hoja de cálculo, lo que conseguiremos con un procedimiento Workbook_BeforeClose que ejecute dicha protección.






0 comentarios:
Publicar un comentario en la entrada