jueves, 8 de septiembre de 2016

VBA: El evento MouseMove para añadir comentarios a una Autoforma

Todos conocemos la propiedad .ControlTipText que nos permite asociar un comentarios nuestros controles de UserForms, sin embargo, tal cosa no es posible en las autoformas de la hoja de cálculo.
Por este motivo hoy veremos una manera de engañar a Excel para conseguir el efecto de un TipText (mensaje o comentario) asociado a una autoforma.


Para ello necesitamos lo siguiente:
Dos controles ActiveX del tipo Etiqueta (o label), al que hemos borrado el texto de su propiedad Caption.

VBA: El evento MouseMove para añadir comentarios a una Autoforma

Los he llamado 'Contorno1' y 'Contorno2'. Estas 'Etiquetas' serán las que controlarán el mensaje o comentario.


Por supuesto necesitamos nuestro comentario.
Para ello insertamos un Cuadro de Texto desde la ficha Insertar > grupo Ilustraciones > botón Formas > Cuadro de texto. Le llamamos 'Msg_Comentario'.
A este cuadro de texto le añadimos un comentario...

VBA: El evento MouseMove para añadir comentarios a una Autoforma



Finalmente insertamos un botón o imagen o autoforma al que asociamos/asignamos la ejecución de nuestra macro principal. Para el ejemplo, insertamos en un módulo estándar de nuestro proyecto de VB:

Sub MacroPrincipal()
'correspondería al procedimiento principal a ejecutar
'[código principal]....
MsgBox "Has presionado el botón de la macro"
End Sub



Llega el momento de tratar el evento MouseMove, por lo que accedemos a la ventana de código de la hoja donde estamos trabajando, y buscamos en el primer desplegable el objeto 'Contorno1':

VBA: El evento MouseMove para añadir comentarios a una Autoforma



A continuación le asociamos el evento MouseMove desde el segundo desplegable:

VBA: El evento MouseMove para añadir comentarios a una Autoforma



Añadimos una línea de código en este evento para conseguir ocultar el Cuadro de texto que habíamos nombrado como 'Msg_comentario':

Private Sub Contorno1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'Al pasar el cursor por este 'Contorne' Exterior
'ocultamos el cuadro de texto con el comentario
ActiveSheet.Shapes("Msg_Comentario").Visible = msoFalse
End Sub



Repetimos la operación para el Contorno2, con el siguiente código

Private Sub Contorno2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'Al pasar el cursor por este 'Contorne' Interior
'mostramos el cuadro de texto con el comentario
ActiveSheet.Shapes("Msg_Comentario").Visible = msoTrue
End Sub



Tenemos todo listo, solo falta componer el cuadro.
Lo primero que haremos será superponer (por capas) el Contorno1 (en el fondo) el Contorno2 (encima del Contorno1) y por último el botón de la macro (por encima de los dos Contornos):

VBA: El evento MouseMove para añadir comentarios a una Autoforma



Es importante la posición de los Contornos, ya que de ello depende el efecto de mostrar/ocultar el comentario...

Para hacer invisible los controles ActiveX de etiquetas 'Contorno1' y 'Contorno2' podemos cambiarles la propiedad .BackStyle a 0-fmBackStyleTransparent:

VBA: El evento MouseMove para añadir comentarios a una Autoforma



Vemos el efecto final conseguido en la siguiente imagen:

VBA: El evento MouseMove para añadir comentarios a una Autoforma

No hay comentarios:

Publicar un comentario en la entrada