Macro para tener una ventana y formulario de Excel siempre en primer plano

Comenzando el año 2015 les quiero desear mucha felicidad y éxitos en todos los aspectos de su vida.

Como has visto en este Blog, hay muchos artículos con uso de macros y algunos pueden tomarse como aplicaciones que parecieran que no fueran Excel.

Si tienes algún archivo o aplicativo en Excel, seguramente te hiciste la pregunta de Cómo hago para que los usuarios no puedan cambiarse a otra ventana mientras usan mi archivo.

La pregunta anterior la resolvemos con el uso del procedimiento ShowXLOnTop.

Cómo funciona

Para este ejemplo usaremos un formulario vacío que al inciarse ejecutará una macro que hará lo siguiente:

  1. Pondrá la ventana de Excel en pantalla completa.
  2. La ventana de Excel abierta se matendrá en primer plano, provocando que deje de funcionar la combinación de teclas Alt + TAB.

Al cerrar el formulario se hará el procedimieno contrario.

image

Figura 1. Ventana de Excel en pantalla completa y en primer plano.

Código de las macros

Procedimientos y variables para tener la ventana en primer plano.

Ubicación: Módulo1

Option Explicit
'
'---------------------------------------------------------------------------------------
' Module    : Módulo1
' Date      : 02/01/2015
' Purpose   : Mantener la ventana de Excel siempre en primer plano
'---------------------------------------------------------------------------------------
'
'Declaramos variables para Windows de 32 y 64 bits
'
#If Win64 Then
    Public Declare PtrSafe Function SetWindowPos _
           Lib "user32" ( _
           ByVal hwnd As LongPtr, _
           ByVal hwndInsertAfter As LongPtr, _
           ByVal x As Long, ByVal y As Long, _
           ByVal cx As Long, ByVal cy As Long, _
           ByVal wFlags As Long) _
           As Long
#Else
    Public Declare Function SetWindowPos _
                         Lib "user32" ( _
                             ByVal hwnd As Long, _
                             ByVal hwndInsertAfter As Long, _
                             ByVal x As Long, ByVal y As Long, _
                             ByVal cx As Long, ByVal cy As Long, _
                             ByVal wFlags As Long) _
                             As Long
#End If
'
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
'
'Procedimiento que será usado con True o False para indicar
'si la ventana de Excel se mantendrá en primer plano
'
Sub ShowXLOnTop(ByVal OnTop As Boolean)
Dim xStype As Long
#If Win64 Then
    Dim xHwnd As LongPtr
#Else
    Dim xHwnd As Long
#End If
If OnTop Then
    xStype = HWND_TOPMOST
Else
    xStype = HWND_NOTOPMOST
End If
'
Call SetWindowPos(Application.hwnd, xStype, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
'
End Sub
'
'Llamamos el procedimiento con el valor True
'
Sub SetXLOnTop()
ShowXLOnTop True
End Sub
'
'Llamamos el procedimiento con el valor False
'
Sub SetXLNormal()
ShowXLOnTop False
End Sub

Mandar llamar las macros de Pantalla completa y primer plano.

Ubicación: UserForm1.

'Botón cerrar
Private Sub CommandButton1_Click()
Unload Me
End Sub
'
'Al iniciar el formulario se:
'1. Mantiene la ventana en primero plano.
'2. La ventana de Excel se pone en pantalla completa.
'
Private Sub UserForm_Initialize()
Application.DisplayFullScreen = True
Call SetXLOnTop
End Sub
'
'Al cerrar el  formulario se:
'1. Mantiene la ventana en primero plano.
'2. La ventana de Excel se pone en pantalla completa.
'
Private Sub UserForm_Terminate()
Call SetXLNormal
Application.DisplayFullScreen = False
End Sub

Anexos

:: Descarga Ventana y formulario de Excel siempre en primer plano – EXCELeINFO.rar

You may also like...