當前位置:編程學習大全網 - 編程語言 - 如何用VBA編程禁用或刪除或隱藏工作簿右上角最大和最小化按鈕(不是工作表上的)?

如何用VBA編程禁用或刪除或隱藏工作簿右上角最大和最小化按鈕(不是工作表上的)?

Private Declare Function SetWindowLong Lib "user32.dll" _

Alias "SetWindowLongA" ( _

ByVal hWnd As Long, _

ByVal nIndex As Long, _

ByVal dwNewLong As Long) _

As Long

Private Declare Function GetWindowLong Lib "user32.dll" _

Alias "GetWindowLongA" ( _

ByVal hWnd As Long, _

ByVal nIndex As Long) _

As Long

Private Declare Function 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

Private Declare Function FindWindowEx Lib "user32.dll" _

Alias "FindWindowExA" ( _

ByVal hWnd1 As Long, _

ByVal hWnd2 As Long, _

ByVal lpsz1 As String, _

ByVal lpsz2 As String) _

As Long

Private Declare Function GetWindowThreadProcessId Lib "user32.dll" ( _

ByVal hWnd As Long, _

ByRef lpdwProcessId As Long) _

As Long

Private Declare Function SendMessage Lib "user32.dll" _

Alias "SendMessageA" ( _

ByVal hWnd As Long, _

ByVal wMsg As Long, _

ByVal wParam As Long, _

ByVal lParam As Long) _

As Long

Private Declare Function ExtractIcon Lib "shell32.dll" _

Alias "ExtractIconA" ( _

ByVal hInst As Long, _

ByVal lpszExeFileName As String, _

ByVal nIconIndex As Long) _

As Long

Private Declare Function GetCurrentProcessId Lib "kernel32.dll" () _

As Long

Private Declare Function GetDesktopWindow Lib "user32.dll" () _

As Long

Private Const GWL_STYLE As Long = (-16)

Private Const WS_MAXIMIZEBOX As Long = &H10000

Private Const WS_MINIMIZEBOX As Long = &H20000

Private Const WS_SYSMENU As Long = &H80000

Private Const HWND_TOP As Long = 0

Private Const SWP_NOMOVE As Long = &H2

Private Const SWP_NOSIZE As Long = &H1

Private Const SWP_FRAMECHANGED As Long = &H20

Private Const SWP_DRAWFRAME As Long = &H20

Private Const WM_SETICON As Long = &H80

'‘*****************************

Private Function FindOurWindow(Optional ByVal sClass As String = vbNullString, _

Optional ByVal sCaption As String = vbNullString)

Dim hWndDesktop As Long

Dim hWnd As Long

Dim hProcThis As Long

Dim hProcWindow As Long

hWndDesktop = GetDesktopWindow

hProcThis = GetCurrentProcessId

Do

hWnd = FindWindowEx(hWndDesktop, hWnd, sClass, sCaption)

GetWindowThreadProcessId hWnd, hProcWindow

Loop Until hProcWindow = hProcThis Or hWnd = 0

FindOurWindow = hWnd

End Function

'‘*****************************

Private Function ApphWnd() As Long

If Val(Application.Version) >= 10 Then

ApphWnd = Application.hWnd

Else

ApphWnd = FindOurWindow("XLMAIN", Application.Caption)

End If

End Function

'‘*****************************

Private Sub HasSystemMenu(ByVal Allow As Boolean)

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

If Allow Then

lStyle = lStyle Or WS_SYSMENU

Else

lStyle = lStyle And Not WS_SYSMENU

End If

Call SetWindowLong(ApphWnd, GWL_STYLE, lStyle)

Call SetWindowPos(ApphWnd, HWND_TOP, 0, 0, 0, 0, _

SWP_NOMOVE Or SWP_NOSIZE Or SWP_DRAWFRAME)

End Sub

'‘*****************************

Public Sub RemoveX()

HasSystemMenu False '移除工作簿左上角圖標和右上角最小化/最大化/關閉按鈕

RemoveWindowX '移除工作表左上角圖標和右上角最小化/最大化/關閉按鈕

End Sub

'‘*****************************

Public Sub RestoreX()

HasSystemMenu True '恢復工作簿左上角圖標和右上角最小化/最大化/關閉按鈕

RestoreWindowX '恢復工作表左上角圖標和右上角最小化/最大化/關閉按鈕

End Sub

'‘*****************************

Public Sub RemoveWindowX()

ActiveWorkbook.Protect , , True

End Sub

'‘*****************************

Public Sub RestoreWindowX()

ActiveWorkbook.Protect , , False

End Sub

插入壹模塊,然後把上述代碼復制過去.,執行宏RemoveX即可去除最大最小化按鈕

  • 上一篇:信息管理專業
  • 下一篇:ReactNative組件的生命周期多長
  • copyright 2024編程學習大全網