UserForm con botones maximizar y minimizar

En 19/08/2010, en Macros, Macros Excel, por avalencia

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

 

Etiquetado con: 
  • http://excellentias.com/dcedeno dcedeno

    ¡Excelente aporte Abraham! Hay poco material en español al respecto de este particular y menos con la claridad con la que lo explicas. De seguro resultará de mucha utilidad a la comunidad.

    Estamos en contacto, saludos y éxito.

  • UserForm con botones maximizar y minimizar

    [...] [...]

  • Dogod

    Hola, me respondo yo mismo, ya me di cuenta del error y sí funciona. Mil gracias!!

    Saludos

  • http://excellentias.com/jmaterano jmaterano

    Hola Dogod ¿Cómo estás?

    ¡Bienvenido!

    Muchas gracias por tu comentario, si tienes alguna inquietud adicional no dudes en contactarnos, adicionalmente dispones de nuestro foro donde gustosamente seran atendidas tus dudas o sugerencias.

    ¡Saludos y Éxito!

    El Equipo EXCELLENTIAS.COM

  • Dogod

    Holajtuki78: y lo que hay ahí arriba mismo sobre el tema no te sirve? Este artículo:

    http://excellentias.com/ocultar-hojas-en-excel-tr…

    No lo he probado pero me gustaría saber y ojalá sirviera para como dices ocultar todas las hojas y sólo dejar visible el formulario…. si te funciona me dices.

    Un saludo

  • http://abrahamexcel.webcindario.com/ Abraham Valencia

    Hola.

    Si dejas la propiedad "ShowModal" del Userform en "True" obtendras un efecto algo parecido a lo que solicitas. DE todos modos, si tu intencion es que no se vea el Excel en su conjunto, lo ideal es que al correr tu Userform coloques la aplicacion como no visible:

    Application.Visible = False

    Saludos

    Abraham

  • jtuki78

    Hola Dogod, la solución dada por Abraham me funcionó perfecto.

    Gracias, Saludos

  • Dogod

    Hola:

    Es cierto,

    bueno de nuevo gracias y saludos a los dos.

    Hasta pronto.

    Dogod

  • http://excellentias.com/userform-con-icono-en-excel/ UserForm con icono en Excel | Excellentias.com – Excel, Infovis & BI Magazine

    [...] he definido en otro artículo (http://excellentias.com/userform-con-botones-maximizar-minimizar/) lo que es el API de Windows así como algunas de sus funciones, incluyendo una que usaremos hoy [...]

  • Beto14

    Excelente aporte, pero si lo pego en un userform limpio si me funciona, si lo agrego a algún formulario ya con código contenido me despliega un mensaje que dice: "los comentarios solamente pueden aparece después de EndSub End funcntion o End Property"

    Aunque lo coloque abajo de un End Sub, por lo que necesito que me ilustres.

  • ENDYAG

    Hola que tal, esta muy padre el codigo, pero tengo un problema no se si me puedas ayudar, en mi userform en el cual coloco el codigo tengo una imagen como fondo, y al poner maximizar la imagen se distorsiona alguna solucion???? muchas gracias!!

  • Beto14

    ok, gracias tienes razon pues solo copie y pegue deja analizo lo que me dices.

  • osasuna

    Buenas:

    He probado el poner los botones de maximizar y minimizar el userform y van de lujo.
    La unica pega es que al darle a maximizar, los botones que tengo en el userform se me quedan desplazados hacia la derecha, y la mitad de la pantalla del lado izquierdo se queda vacia.
    Hay alguna forma de que al darle a maximizar, los botones del userform se queden centrados en la pantall.
    Muchas gracias.
    Un saludo

¿Buscando algo?

Utilice el siguiente formulario para buscar en el sitio:

¿Todavía no encuentras lo que estás buscando? Deja un comentario sobre un artículo o ponte en contacto con nosotros para que podamos ayudarte

WordPress Blog