¿Cómo deshabilitar, eliminar u ocultar mediante programación los botones Maximizar y Minimizar en la esquina superior derecha del libro (no en la hoja de trabajo) usando VBA?
Función de declaración privada SetWindowLong Lib "user32.dll" _
Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) _
As Long
Función de declaración privada GetWindowLong Lib "user32.dll" _
Alias "GetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) _
As Long
Función de declaración privada SetWindowPos Lib "user32.dll" ( _
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
Función de declaración privada FindWindowEx Lib "user32.dll" _
Alias "FindWindowExA" ( _
ByVal hWnd1 Como largo, _
ByVal hWnd2 Como largo, _
ByVal lpsz1 Como cadena, _
ByVal lpsz2 Como String) _
Siempre
Función de declaración privada GetWindowThreadProcessId Lib "user32.dll" ( _
ByVal hWnd Mientras, _
ByRef lpdwProcessId As Long) _
As Long
Función de declaración privada SendMessage Lib "user32.dll" _
Alias "SendMessageA" ( _
ByVal hWnd Mientras, _
ByVal wMsg Mientras, _
ByVal wParam Mientras, _
ByVal lParam Mientras) _
Siempre
Función de declaración privada ExtractIcon Lib "shell32.dll" _
Alias "ExtractIconA" ( _
> ByVal hInst As Long, _
ByVal lpszExeFileName As String, _
ByVal nIconIndex As Long) _
As Long
Privado Declarar función GetCurrentProcessId Lib "kernel32.dll" () _
Siempre
Privado Declarar función GetDesktopWindow Lib "user32.dll" () _
Siempre
Const privada GWL_STYLE mientras = (-16)
Const privada WS_MAXIMIZEBOX mientras = &H10000
Const privada WS_MINIMIZEBOX mientras = &H20000
Const privada WS_SYSMENU mientras = &H80000
Const privada HWND_TOP mientras = 0
Const privada SWP_NOMOVE mientras = &H2
Const privada SWP_NOSIZE mientras = &H1
Const privada SWP_FRAMECHANGED mientras = &H20
Const privada SWP_DRAWFRAME mientras = &H20
Const privada WM_SETICON mientras = &H80
''*********************************
Función privada FindOurWindow(Opcional ByVal sClass As String = vbNullString, _
Opcional ByVal sCaption As String = vbNullString)
Atenuar hWndDesktop mientras
Atenuar hWnd mientras
Atenuar hProcThis como Long
Atenuar hProcWindow As Long
hWndDesktop = GetDesktopWindow
hProcThis = GetCurrentProcessId
Hacer
hWnd = FindWindowEx (hWndDesktop, hWnd, sClass, sCaption)
GetWindowThreadProcessId hWnd, hProcWindow
Bucle hasta hProcWindow = hProcThis o hWnd = 0
Fin
dOurWindow = hWnd
Función final
''****************************** *****
Función privada ApphWnd() Siempre
Si Val(Application.Version) >= 10 Entonces
ApphWnd = Application.hWnd
Else
ApphWnd = FindOurWindow("XLMAIN", Application.Caption)
Finalizar si
Finalizar función
''** ****************************
Sub HasSystemMenu privado(ByVal Permitir como booleano) p>
Dim lStyle As Long: lStyle = GetWindowLong(ApphWnd, GWL_STYLE)
Si está permitido, entonces
lStyle = lStyle o WS_SYSMENU
De lo contrario p>
lStyle = lStyle y no WS_SYSMENU
Finalizar si
Llamar a SetWindowLong(ApphWnd, GWL_STYLE, lStyle)
Llamar a SetWindowPos(ApphWnd, HWND_TOP, 0, 0, 0, 0, _
SWP_NOMOVE o SWP_NOSIZE o SWP_DRAWFRAME)
End Sub
''********** ****** ****************
Public Sub RemoveX()
HasSystemMenu False 'Elimina el ícono en la parte superior esquina izquierda del libro y el botón minimizar/maximizar en la esquina superior derecha Minimizar/Cerrar
RemoveWindowX 'Elimina el icono en la esquina superior izquierda de la hoja de cálculo y el botón minimizar/maximizar/cerrar en la parte superior esquina derecha de la hoja de trabajo
End Sub
''* **************************** ****
Public Sub RestoreX()
HasSystemMenu True ' Restaura el icono en la esquina superior izquierda del libro y el botón minimizar/maximizar/cerrar en la esquina superior derecha
RestoreWindowX 'Restaura el icono en la esquina superior izquierda de la hoja de trabajo y el botón minimizar/maximizar/cerrar en la esquina superior derecha
End Sub
' '******************************
Sub pública RemoveWindowX ()
ActiveWorkbook.Protect , , True
End Sub
''************************ ** **********
Sub pública RestoreWindowX()
ActiveWorkbook.Protect , , False
End Sub
Inserte un módulo y luego copie el código anterior. Ejecute la macro RemoveX para eliminar el máximo.
Botón minimizar