Red de conocimiento informático - Material del sitio web - ¿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?

¿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)

Dim lStyle As Long: lStyle = GetWindowLong(ApphWnd, GWL_STYLE)

Si está permitido, entonces

lStyle = lStyle o WS_SYSMENU

De lo contrario

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