Вы находитесь на странице: 1из 4

Macro para tener una ventana y

formulario de Excel siempre en


primer plano
BY SERGIO ALEJANDRO CAMPOS JANUARY 5, 2015

Comenzando el ao 2015 les quiero desear mucha felicidad y xitos en todos


los aspectos de su vida.
Como has visto en este Blog, hay muchos artculos con uso de macros y
algunos pueden tomarse como aplicaciones que parecieran que no
fueran Excel.
Si tienes algn archivo o aplicativo en Excel, seguramente te hiciste la
pregunta de Cmo 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.

Cmo funciona
Para este ejemplo usaremos un formulario vaco 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 combinacin de teclas Alt + TAB.
Al cerrar el formulario se har el procedimieno contrario.

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

Cdigo de las macros


Procedimientos y variables para tener la ventana en primer plano.
Ubicacin: Mdulo1
Option Explicit
'
'--------------------------------------------------------------------------------------' Module
' Date

: Mdulo1
: 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.


Ubicacin: UserForm1.
'Botn 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

Вам также может понравиться