Evento Al cambiar la selección en Calc
¿Cómo detectar si el usuario ha cambiado de celda? utilizando un evento de la hoja de cálculo llamado Al cambiar la selección (en Apache OpenOffice, Selección cambiada en LibreOffice).
Este evento se dispara cuando por cualquier sistema (ratón, teclado o por código) se cambia de celda o se selecciona un rango de celdas o un rango múltiple de celdas.
Veamos cómo detectar tal situación.
El evento Al cambiar la selección se define para cada hoja de nuestro libro de Calc. Haciendo clic secundario sobre la pestaña de la hoja y seleccionando la opción Eventos de la hoja... se mostrará el diálogo Acción asignada que nos muestra y permite asignar macros a eventos.
Entre los eventos que disponemos se encuentra el llamado Al cambiar la selección (en Apache OpenOffice) o Selección cambiada (en LibreOffice), que se produce siempre que el usuario selecciona una celda, rango o rango múltiple distinto al actual.
Desde el botón Macro... podemos asignar una macro existente al evento. En la imagen estamos asignando al evento una macro llamada Evento_Cambiar_Seleccion almacenada en un contenedor documento. El documento se puede descargar al final de este artículo.
Una vez asignada la macro, cualquier selección que realicemos sobre la hoja hará que se llame a la misma.
La macro recibirá un objeto que nos permite conocer qué es lo que ha seleccionado el usuario. Este objeto cambia de tipo, pudiendo ser un objeto tipo celda, rango o rango múltiple. Esto nos permite detectar qué es lo que se ha seleccionado en la hoja.
Podemos ver un ejemplo en la siguiente macro, que recibe el objeto en la variable oEv, y escribe en la celda A1 qué es lo que ha seleccionado el usuario:
Option Explicit
Sub Evento_Cambiar_Seleccion( oEv )
' oEv es un objeto de tipo scCellObj si se ha seleccionado una celda
' o tipo scCellRangeObj si se ha seleccionado un rango
' o tipo scCellRangesObj si se ha seleccionado un rango múltiple
Dim CeldaA1 As Object
CeldaA1=ThisComponent.GetCurrentController.GetActiveSheet.GetCellRangeByName( "A1" )
If oEv.SupportsService( "com.sun.star.sheet.SheetCell" ) Then
' Se ha seleccionado una celda
CeldaA1.String = "Has seleccionado la celda " & oEv.AbsoluteName
ElseIf oEv.SupportsService( "com.sun.star.sheet.SheetCellRange" ) Then
' Se ha seleccionado un rango
CeldaA1.String = "Has seleccionado el rango " & oEv.AbsoluteName
ElseIf oEv.SupportsService( "com.sun.star.sheet.SheetCellRanges" ) Then
'Se ha seleccionado un rango múltiple (varios rangos)
CeldaA1.String = "Has seleccionado el rango múltiple " & oEv.AbsoluteName
End If
End Sub
La macro examina los servicios que soporta el objeto oEv para determinar exactamente qué es lo que se ha seleccionado, y lo presenta en la celda A1, como puede verse en la imagen que encabeza este artículo.
Descargar documento con la macro Evento Al Cambiar Seleccion.ods