Chris tiene, en el trabajo, una gran hoja de trabajo que incluye varias macros. Uno de estos elimina un bloque de celdas y mueve el resto hacia arriba. A veces, sin embargo, los usuarios no usarán la macro y, en su lugar, eliminarán manualmente el bloque. Es un desastre si la eliminación mueve las células hacia la izquierda en lugar de hacia arriba.

Chris se pregunta si hay alguna forma de utilizar las macros para imponer el movimiento hacia arriba de las celdas y evitar el movimiento manual de las celdas hacia la izquierda.

Como ocurre con muchas cosas en Excel, hay varias formas de abordar este problema. No puedo profundizar demasiado en los detalles aquí, ya que cualquier enfoque seleccionado en última instancia dependerá de la naturaleza de la información en la hoja de trabajo y de lo que quiera permitir o rechazar. Sin embargo, las siguientes secciones pueden proporcionar la clave que necesita para elegir el enfoque que sea mejor para usted.

Proteger la hoja de trabajo

Un enfoque simple (y efectivo) es diseñar su hoja de trabajo para que pueda protegerse. Por supuesto, debe asegurarse de que las celdas donde el usuario debe ingresar información estén desprotegidas, pero de lo contrario su macro puede asegurarse de que cuando la hoja de trabajo esté activada, esté protegida.

Esto excluye la posibilidad de que el usuario elimine manualmente cualquier celda de la hoja de trabajo.

Esto significa que si es necesario eliminar el rango de celdas, el usuario está obligado (por la protección) a seleccionar su macro para su eliminación. Luego, la macro puede desproteger la hoja de trabajo, eliminar el rango de celdas y volver a protegerla.

Interceptar eliminaciones

Otro enfoque basado en macros es trabajar con el evento BeforeDelete para controlar lo que sucede realmente. El siguiente es un controlador de eventos simple que podría ser la base de lo que realmente usa:

Private Sub Worksheet_BeforeDelete()

Dim delRng As Range     Dim selRng As Range

On Error Resume Next     Set delRng = Range("C2:D5")  ' Change the range to the block                                  ' of cells to be deleted (manually                                  ' or by macro)

Set selRng = Application.Selection  ' Cells selected manually                                         ' by the user     If MyRng.Address = delRng.Address Then         Selection.Delete shift:=xlUp     End If End Sub

El controlador de eventos simplemente compara el rango que desea eliminar solo hacia arriba con el rango que el usuario seleccionó para eliminar. Si los rangos son los mismos, el controlador borra el rango y lo mueve hacia arriba. Obviamente, necesitaría cambiar el rango asignado a la variable delRng para que coincida con el rango que desea monitorear.

Reasignación de la clave de eliminación

Hablando de eliminar, también puede reasignar la tecla Eliminar para que haga lo que quiera. Todo lo que necesita hacer es incluir una macro como la siguiente en el módulo de código de ThisWorkbook:

Private Sub Workbook_Open()

Application.OnKey "{DELETE}", "MyMacro()"

End Sub

Esto significa que cuando se abre el libro de trabajo, la tecla Eliminar se reasigna de modo que cada vez que se presiona, MyMacro (cambie esto a la macro que desee) se ejecuta automáticamente.

Tenga en cuenta que este enfoque solo afecta al presionar la tecla Eliminar; no afecta a las eliminaciones realizadas de otra manera. Para esos, sus macros aún necesitarían anticipar y manejar la lógica.

El enfoque completo

Eso nos lleva al enfoque completo. Este enfoque simplemente significa hacer una lista de todas las diversas formas en que el usuario podría iniciar una eliminación y luego interceptar esas formas. La lista (y las intercepciones) necesariamente debería incluir algunos de los enfoques ya discutidos, como el manejo de la tecla Eliminar. También necesitaría averiguar cómo deshabilitar o modificar lo que sucede cuando el usuario hace clic con el botón derecho del ratón o cuando el usuario selecciona una opción de eliminación de la cinta.

(Es posible que incluso desee eliminar las opciones relacionadas con la eliminación de la interfaz de usuario).

Este enfoque puede ser bastante largo, ya que una lista exhaustiva de métodos de eliminación puede ser laboriosa de armar y manejar.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (13632) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365.