Crear un formulario de introducción o Splash en Excel vba quitando la barra de título

Los formularios de introducción o Splash son muy socorridos por las aplicaciones de escritorio para mostrar alguna introducción, recomendaciones o créditos acerca de la misma aplicación o sus creadores. En su mayoría, estas ventanas están programadas para que se cierren automáticamente cada x cantidad de segundos.

De hecho siempre que abrimos un programa de Office vemos una ventana donde nos muestra el proceso de apertura del programa. Como se muestra en la Figura 1.

image

Figura 1. Formulario Splash de Excel 2013.

Ver Video Cómo crear un Formulario tipo Splash

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Cómo creamos un formulario Splash Para Excel

Lo primero será diseñar nuestro formulario con la información que deseemos. Recordemos que la vista diseño mostrará los bordes y la barra de título del formulario, pero al ejecutarse éstas desaparecerán.

image

Figura 2. Formulario Splash en Excel en modo diseño.

En el evento Workbook_Open pondremos el código vba encargado de lanzar el formulario. Al abrirse el formulario veremos que no tendrá bordes y la barra de título no será visible.

También nos daremos cuenta que a los 5 segundos, el formulario de cerrará. Para esto utilizamos el método OnTime.

image

Figura 3. Formulario Splash en Excel que se cierra automáticamente a los 5 segundos.

Código vba

Ubicación: Hoja1.

Private Sub CommandButton1_Click()
'
'Abrimos el formulario
'
    frmSplash.Show vbModeless
End Sub

Ubicación: ThisWorkbook

Private Sub Workbook_Open()
'
'Al abrir el archivo
'
    frmSplash.Show vbModeless
    '
End Sub

Ubicación: frmSplash

Private Sub UserForm_Initialize()
'
'Al iniciar el formulario
'
    Call RemoveCaption(Me)
    '
    Application.OnTime Now + TimeValue("00:00:05"), "CerrarFormularioSplash"
    '
End Sub

Ubicación: Módulo1

Option Explicit
'
'validamos la versión de Office y llamamos API's
'
#If VBA7 And Win64 Then
    Declare PtrSafe Function FindWindow Lib "USER32" _
            Alias "FindWindowA" (ByVal lpClassName As String, _
                                 ByVal lpWindowName As String) As LongPtr
    '
    Declare PtrSafe Function GetWindowLongPtr Lib "USER32" _
            Alias "GetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
    '
    Declare PtrSafe Function SetWindowLongPtr Lib "USER32" _
            Alias "SetWindowLongPtrA" (ByVal hWnd As LongPtr, _
                                       ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
    '
    Declare PtrSafe Function DrawMenuBar Lib "USER32" (ByVal hWnd As LongPtr) As Long
    '
#Else
    Private Declare Function FindWindow Lib "USER32" _
                                        Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    '
    Private Declare Function GetWindowLong Lib "USER32" _
                                           Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) 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 DrawMenuBar Lib "USER32" (ByVal hWnd As Long) As Long
    '
#End If
'
Sub RemoveCaption(objForm As Object)
'
'Usamos esta procedimiento para ocultar la barra de título
'
    #If VBA7 Then
        Dim hMenu As LongPtr
        Dim mhWndForm As LongPtr
        Dim lStyle As LongPtr
    #Else
        Dim hMenu As Long
        Dim mhWndForm As Long
        Dim lStyle As Long
    #End If
    '
    If Val(Application.Version) < 9 Then
        mhWndForm = FindWindow("ThunderXFrame", objForm.Caption)
    Else
        mhWndForm = FindWindow("ThunderDFrame", objForm.Caption)
    End If
    '
    #If VBA7 And Win64 Then
        '
        lStyle = GetWindowLongPtr(mhWndForm, -16)
        lStyle = lStyle And Not &HC00000
        SetWindowLongPtr mhWndForm, -16, lStyle
        DrawMenuBar mhWndForm
        '
    #Else
        lStyle = GetWindowLong(mhWndForm, -16)
        lStyle = lStyle And Not &HC00000
        SetWindowLong mhWndForm, -16, lStyle
        DrawMenuBar mhWndForm
        '
    #End If
    '
End Sub
'
Sub ShowForm()
'
'Mandamos llamar al Formulario
'
    SplashForm.Show vbModeless
    '
End Sub
'
Private Sub CerrarFormularioSplash()
'
'Cerramos el formulario
'
    Unload frmSplash
    '
End Sub

Anexos

:: Descarga Formulario Splash en Excel.rar

You may also like...

13 Responses

  1. JoaoM says:

    Hola Sergio
    Dentro de un solo proyecto con varios Formularios, colocado esta parte
    Call RemoveCaption(Me)

    en el Private Sub UserForm_Initialize() de todos formularios dentro del proyecto, funciona en cualquier de estos formularios?

  2. JoaoM says:

    Ya detecte que si se puede pero

    Tengo un detalle y es que dentr odel modulo esta esto
    Private Sub CerrarFormularioSplash()

    ‘Cerramos el formulario

    Unload frmSplash

    End Sub
    para este formulario. ¿Cómo hago para que pueda usar en 5 formularios mas?
    Probé y el formulario de prueba no se cierra aunque tenga la línea para los segundos de cierre

    Agradezco tu informacion

  3. JoaoM says:

    Descubri algo

    En el modulo hay que crear para cada formulario
    Private Sub CerrarFormularioJoao()

    ‘Cerramos el formulario
    Unload Joao
    End Sub

    Luego colocar en el initialize de cada formulario esto; CerrarFormularioJoao mas la línea para los segundos. Así quedaría para el 2º formulario
    Private Sub UserForm_Initialize()
    Call RemoveCaption(Me)

    Application.OnTime Now + TimeValue(“00:00:05”), “CerrarFormularioJoao”

    End Sub

    Cada formulario tien su nombre, ese nombre tiene que ser incluido en la línea Application.OnTime Now + TimeValue(“00:00:05”), “CerrarFormularioJoao”

    Resumiendo:
    Para un 2ª formulario

    Colocar en el mismo modulo
    Private Sub CerrarFormularioJoao()
    ‘Cerramos el formulario
    Unload Joao
    End Sub

    y el código del 2º formulario
    Private Sub UserForm_Initialize()
    Call RemoveCaption(Me)
    Application.OnTime Now + TimeValue(“00:00:05”), “CerrarFormularioJoao”
    End Sub

    Si va a ser un formulario para trabajo y quiere que no tenga la barra, solo no colocar la línea Application.OnTime Now + TimeValue(“00:00:05”), “CerrarFormularioJoao”

  4. JoaoM says:

    Hola Sergio
    Dentro de un solo proyecto con varios Formularios, colocado esta parte
    Call RemoveCaption(Me)

    en el Private Sub UserForm_Initialize() de todos formularios dentro del proyecto, funciona en cualquier de estos formularios?

  5. JoaoM says:

    Ya detecte que si se puede pero

    Tengo un detalle y es que dentr odel modulo esta esto
    Private Sub CerrarFormularioSplash()

    ‘Cerramos el formulario

    Unload frmSplash

    End Sub
    para este formulario. ¿Cómo hago para que pueda usar en 5 formularios mas?
    Probé y el formulario de prueba no se cierra aunque tenga la línea para los segundos de cierre

    Agradezco tu informacion

  6. JoaoM says:

    Descubri algo

    En el modulo hay que crear para cada formulario
    Private Sub CerrarFormularioJoao()

    ‘Cerramos el formulario
    Unload Joao
    End Sub

    Luego colocar en el initialize de cada formulario esto; CerrarFormularioJoao mas la línea para los segundos. Así quedaría para el 2º formulario
    Private Sub UserForm_Initialize()
    Call RemoveCaption(Me)

    Application.OnTime Now + TimeValue(“00:00:05”), “CerrarFormularioJoao”

    End Sub

    Cada formulario tien su nombre, ese nombre tiene que ser incluido en la línea Application.OnTime Now + TimeValue(“00:00:05”), “CerrarFormularioJoao”

    Resumiendo:
    Para un 2ª formulario

    Colocar en el mismo modulo
    Private Sub CerrarFormularioJoao()
    ‘Cerramos el formulario
    Unload Joao
    End Sub

    y el código del 2º formulario
    Private Sub UserForm_Initialize()
    Call RemoveCaption(Me)
    Application.OnTime Now + TimeValue(“00:00:05”), “CerrarFormularioJoao”
    End Sub

    Si va a ser un formulario para trabajo y quiere que no tenga la barra, solo no colocar la línea Application.OnTime Now + TimeValue(“00:00:05”), “CerrarFormularioJoao”

  7. joanlo says:

    Muy útil.
    Tengo un problema, al ajecutarlo me agranda un poco el formulario a lo alto.
    Lo apliqué para quitar el texto en un formulario que muestra el progreso de ejcución pero me queda un espacio.

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: