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:
-
Pondrá la ventana de Excel en pantalla completa.
-
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.
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