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
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
- Compartir respuesta