Descubramos como colocarle botones para maximizar y minimizar a nuestros userform de Excel.
Hola ¿Cómo están?
Una pregunta muy frecuente entre los usuarios de Microsoft Excel que ya se aventuraron en usar el Visual Basic para Aplicaciones (VBA) que viene con él y que han comenzado, a su vez, a usar los formularios de usuarios de VBA (UserForm), es que como le agregan a este los “clásicos” botones del Windows de maximizar y minimizar, ya que estos no los traen.
Lo primero es decir, que si se pueden agregar dichos botones, lo segundo será decir que no es difícil y lo tercero será decir que aunque no es difícil hay que usar funciones de la API de Windows, que a algunas y algunos les podría parecer un misterio.
Bueno, para empezar algunas definiciones rápidas:
1- API: Interfaz de programación de aplicaciones, que es un conjunto de funciones residentes en bibliotecas que permiten que una aplicación se ejecute en un sistema operativo. Se utilizan para realizar tareas cuando resulta difícil escribir procedimientos equivalentes con el código propio del programa que se está usando.
2- FindWindow: Función del API de windows que nos Devuelve el “Handle” de la ventana que coincida con la clase y nombre indicados
3- GetWindowLong: Función del API de windows que obtiene las características de la ventana que se le indica
4- SetWindowLong: Función del API de windows que modifica un atributo de la ventana especificada
5- Thunderdframe: Nombre de la “clase” de los Userform del VBA de Excel (A partir del Excel 2000).
¿Y qué hacemos ahora? Pues, simplemente agregamos nuestro UserForm, vamos a él, presionamos F7 para ver su modulo y agregar código, y pegamos lo que coloco a continuación:
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const GWL_STYLE As Long = (-16)
Private Sub UserForm_Initialize()
Dim lngMyHandle As Long, lngCurrentStyle As Long, lngNewStyle As Long
'Obtenemos el "Handle" del Userform
lngMyHandle = FindWindow("THUNDERDFRAME", Me.Caption)
'Obtenemos el estilo actual del UserForm
lngCurrentStyle = GetWindowLong(lngMyHandle, GWL_STYLE)
'Creamos un nuevo estilo de titulo con los botones deseados
lngNewStyle = lngCurrentStyle Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
'Aplicamos las nuevas propiedades al UserForm
SetWindowLong lngMyHandle, GWL_STYLE, lngNewStyle
End Sub
El resultado una vez insertado el código es como el mostrado en la imagen anexa:
Algo importante y que sirve para obtener mejores resultados, es colocar la propiedad “ShowModal” de nuestro UserForm en “False”. Ahora si, disfruten de las nuevas propiedades de su Userform.
Nota: Si no me equivoco, la primera vez que vi el uso de código para obtener este resultado, era obra de Daniel Klann
Saludos y Éxito
El Equipo de EXCELLENTIAS.COM
-
http://excellentias.com/dcedeno dcedeno
-
UserForm con botones maximizar y minimizar
-
Dogod
-
http://excellentias.com/jmaterano jmaterano
-
Dogod
-
http://abrahamexcel.webcindario.com/ Abraham Valencia
-
jtuki78
-
Dogod
-
http://excellentias.com/userform-con-icono-en-excel/ UserForm con icono en Excel | Excellentias.com – Excel, Infovis & BI Magazine
-
Beto14
-
ENDYAG
-
Beto14
-
osasuna













