Mostrar mensaje de información de un control commandbutton en una hoja de Excel

Nuestro consultante nos envía la siguiente consulta. Tengo una hoja de excel en la cual cree un commandbutton, lo que quiero saber, es el codigo en vba que me permita que al pasar el mouse por encima de boton me muestre la informacion de guia referente al botón.

Lo que quiere nuestro consultante en este caso es que al pasar el ratón por encima del botón muestre como texto "Formulario". Si el botón estuviese dentro de un formulario, la solución sería más sencilla, pero al tratarse de un botón creado en una hoja de manera independiente, la tarea se complica ya que hay que utilizar código que llame a la librería de sistema.

Resultado a obtener:

Pasos para crear la solución:

Creamos un botón mediante un control ActiveX desde la Ficha Programador - Insertar

Dibujamos nuestro botón en la hoja
Seleccionamos el botón
En el grupo Controles, seleccionamos la opción Propiedades

Nota: Recuerda tener el Modo Diseño activado

Establecemos el nombre interno del botón como CommandButton1
Aprovechamos a cambiar en Caption el texto del botón. Escribimos Aceptar

Ya tenemos nuestro botón creado.
Accedemos al Editor VBA mediante Alt+F11
Insertamos un módulo desde menú Insertar - Módulo


Hacemos doble clic en Módulo1 y escribimos el siguiente código:

'Declaramos dos funciones de sistema que llaman a la librería del usuario de Windows

Option Explicit


Declare Function GetSystemMetrics Lib "user32" ( _
ByVal nIndex As Long) As Long


Declare Function GetSysColor Lib "user32" ( _
ByVal nIndex As Long) As Long

'Declaramos una segunda función que nos permite crear la etiqueta

Public Function Info(objHostOLE As Object, _
sTTLText As String) As Boolean
Dim objToolTipLbl As OLEObject
Dim objOLE As OLEObject


Const SM_CXSCREEN = 0
Const COLOR_INFOTEXT = 23
Const COLOR_INFOBK = 24
Const COLOR_WINDOWFRAME = 6

Application.ScreenUpdating = False 'la pantalla no se actualiza solo mientras se crea la etiqueta y se le da formato

For Each objOLE In ActiveSheet.OLEObjects
If objOLE.Name = "TTL" Then objOLE.Delete 'Solo puede existir una cada vez
Next objOLE

'creamos el control de la etiqueta...
Set objToolTipLbl = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Label.1")

'...y le damos formato para que parezca una ventana de información
With objToolTipLbl
.Top = objHostOLE.Top + objHostOLE.Height - 10
.Left = objHostOLE.Left + objHostOLE.Width - 10
.Object.Caption = sTTLText
.Object.Font.Size = 8
.Object.BackColor = GetSysColor(COLOR_INFOBK)
.Object.BackStyle = 1
.Object.BorderColor = GetSysColor(COLOR_WINDOWFRAME)
.Object.BorderStyle = 1
.Object.ForeColor = GetSysColor(COLOR_INFOTEXT)
.Object.TextAlign = 1
.Object.AutoSize = False
.Width = GetSystemMetrics(SM_CXSCREEN)
.Object.AutoSize = True
.Width = .Width + 2
.Height = .Height + 2
.Name = "TTL"
End With
DoEvents
Application.ScreenUpdating = True


'Establecemos que la etiqueta desaparezca después de 5 segundos de haber retirado el ratón...
' ...del botón. Puedes establecer menos segundos

Application.OnTime Now() + TimeValue("00:00:05"), "DeleteToolTipLabels"

End Function

'Por último, creamos otro procedimiento que nos permite borrar el texto de la etiqueta

Public Sub DeleteToolTipLabels()
Dim objToolTipLbl As OLEObject
For Each objToolTipLbl In ActiveSheet.OLEObjects
If objToolTipLbl.Name = "TTL" Then objToolTipLbl.Delete
Next objToolTipLbl

End Sub




Hacemos doble clic en la hoja en la que hemos creado el botón. En este caso es la Hoja1.
Escribimos el siguiente código.


Sub CommandButton1_MouseMove(ByVal Button As Integer, _
ByVal Shift As Integer, _
ByVal X As Single, _
ByVal Y As Single)
Dim objTTL As OLEObject
Dim fTTL As Boolean


For Each objTTL In ActiveSheet.OLEObjects
fTTL = objTTL.Name = "TTL"
Next objTTL


If Not fTTL Then
Info CommandButton1, "Formulario"
End If


End Sub

Nota1: Si nombras el botón de otra manera tendrás que sustituir el nombre CommanButton1 delante de _MouseMove

Nota2: En las últimas líneas de código recuerda que Info es el nombre de la función que creamos en el módulo, CommandButton1 el nombre del botón que hemos creado y el texto entre comillas es el que queremos que aparezca cuando posicionemos el ratón sobre el botón.



Para que funcione hay que desactivar el Modo Diseño


Si quieres recibir una lección semanal, no dudes en suscribirte a nuestra explicación semanal en el formulario de la derecha.

Descargar archivo de ejemplo aquí. Recuerda que la versión del archivo es 2007.

0 comentarios:

Publicar un comentario

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Top WordPress Themes