Macro para minimizar ventanas de windows

¿Me gustaría saber si hay alguna posibilidad de que a través de una macro se puedan minimizar todas las ventanas abiertas de windows y que solamente se vea el formulario con el que trabajo y el escritorio de fondo?.

1 respuesta

Respuesta
1

Pon esto en el módulo que tienes para abrir el formulario

Sub Macro2()
'
    Application.WindowState = xlMinimized
    UserForm1.Show
'
End Sub

Pon lo siguiente cuando cierres el form

Private Sub UserForm_Terminate()
    Application.WindowState = xlMaximized
End Sub

Saludos.Dante Amor

Hola Dante Amor

Muchas gracias por tu pronta respuesta, pero no solo quiero minimizar excel si no todas las otras posibles ventanas que puedan estar abiertas, tales como, el explorador etc..... ¿Se podría hacer con los atajos del teclado diciéndole que pulse la tecla de Windows + M?.

Un saludo

Te anexo las macro para mostrar el escritorio y dejar solamente el formulario.

La primer macro que debes ejecutar para abrir el formulario es la macro "Test"

Pon lo siguiente en un módulo:

Option Base 1
Option Explicit
Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
Declare Function ShowWindow Lib "user32" _
(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function EnumWindows Lib "user32.dll" _
(ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function SetActiveWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
Const SW_HIDE = 0
Const SW_SHOW = 5
Public blnWndsHidden As Boolean
Dim objUF As UserForm1
Dim Arr() As Variant
Dim intCounter As Integer
'
Sub Test()
'referencia: http://www.mrexcel.com/forum/excel-questions/197943-show-desktop-using-visual-basic-applications.html
    Set objUF = New UserForm1
    objUF.Show
    Set objUF = Nothing
End Sub
'
Sub Hide_AllWindows()
    'don't hide wndws more than once
    If Not blnWndsHidden Then
        'initiate counter & Arr and cycle thru all Top level Windows
        intCounter = 1
        Erase Arr()
        EnumWindows AddressOf EnumWindowsProc, ByVal 0
        'reset flag
        blnWndsHidden = True
     Else
        MsgBox "Windows Already Hidden !  ", vbInformation
    End If
End Sub
'
Sub Restore_AllWindows()
    Dim i As Integer
    If blnWndsHidden Then
        'retrieve all window handles from array
        'and dislay them
        For i = LBound(Arr) To UBound(Arr)
            ShowWindow Arr(i), SW_SHOW
        Next
        'reset flag
        blnWndsHidden = False
        SetActiveWindow Application.hwnd
    Else
        MsgBox "Windows Already Restored !  ", vbInformation
    End If
End Sub
'
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    'don't hide Userform!
    If hwnd <> FindWindow(vbNullString, objUF.Caption) Then
        'look for visible windows only, store their HWNDs
        'and then hide them
        If IsWindowVisible(hwnd) Then
            ReDim Preserve Arr(intCounter)
            Arr(intCounter) = hwnd
            intCounter = intCounter + 1
            ShowWindow hwnd, SW_HIDE
        End If
    End If
    'next call
    EnumWindowsProc = True
End Function

Ahora pon lo siguiente en el userform1

Private Sub CommandButton1_Click()
    Call Restore_AllWindows
End Sub
Private Sub CommandButton2_Click()
   Call Hide_AllWindows
End Sub
Private Sub CommandButton3_Click()
    If blnWndsHidden Then Call Restore_AllWindows
    Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If blnWndsHidden Then Call Restore_AllWindows
End Sub

El formulario debe tener 3 botones:


Te anexo el archivo para que lo pruebes.

https://www.dropbox.com/s/8x39thmfjgqqcxe/mostrar%20escritorio.xlsm?dl=0 


Una vez que lo pruebes, puedes tomar el código y colocarlo en tu formulario.

Saludos. Dante Amor

Espero que tengas oportunidad de probar la macro, hace lo que pediste, minimiza todas las ventanas y solamente presenta el formulario.

Avísame si tienes dudas, de lo contrario no olvides valorar adecuadamente la respuesta.

En esta misma referencia encontrarás otro método y algunos comentarios:

'referencia: http://www.mrexcel.com/forum/excel-questions/197943-show-desktop-using-visual-basic-applications.html

Estimado Dante,

Hasta mañana no tengo la oportunidad de probar tu macro, ya que me encuentro de viaje. Te agradezco muchísimo el tiempo que te he robado. Mañana la pruebo nada más llegar. 

Un saludo

Estimado Dante,

Disculpa mi tardanza en contestar pero llevo dos días dándole vueltas a un problema que me arroja el formulario. Te cuento he colocado: una llamada a la macro "Test" en el Workbook Open y en el Initialize del Userform una llamada a la macro "Hide_AllWindows", pero me devuelve un error "91" (Variable de objeto o bloque With no establecido). Y no encuentro solución.

Me pasa lo mismo cuando ejecuto el formulario que me enviaste desde Vba/Excel. Sin embargo desde el botón de la "hoja 1" no.¿?

Un Cordial Saludo 

Como te comenté, tienes que abrir el formulario partiendo de esta macro

Sub Test()'referencia: http://www.mrexcel.com/forum/excel-questions/197943-show-desktop-using-visual-basic-applications.html    Set objUF = New UserForm1    objUF.Show    Set objUF = NothingEnd Sub

Estimado Dante,

Ya he encontrado el problema y la macro funciona perfectamente. El único problema es que cuando arranco el userform a través de la macro "test", en el initialize del userform he puesto la llamada a la macro "hide_allwindows" y es cuando me envía el error  "91" (Variable de objeto o bloque With no establecido) pero si la ejecuto a través de un botón no. ¿Esto se podría solucionar para que cuando muestre el formulario directamente se minimice todo?.

Muchas gracias por todo

Pon la llamada a la macro "hide_allwindows" en el evento Activate

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas