Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 8978|回复: 2

移除Excel工作簿或工作表窗口中左上角的图标以及右上角的最大化、最小化、关闭按钮

[复制链接]
发表于 2011-8-3 12:48 | 显示全部楼层 |阅读模式
将移除Excel工作簿或工作表窗口中左上角的图标以及右上角的最大化、最小化、关闭按钮,下载本示例中的附件后,当您点击工作簿中的“移除”按钮时,工作簿和工作表上的图标及最大化、最小化、关闭按钮全部移除,点击“恢复”按钮后,将恢复上述图标和按钮。
在程序中语句HasSystemMenu False 的作用是移除工作簿左上角图标和右上角最小化/最大化/关闭按钮,将参数False改为True或省略该语句将不移除;语句RemoveWindowX 的作用是移除工作表左上角图标和右上角最小化/最大化/关闭按钮,若省略该语句,将不移除; 语句HasSystemMenu True的作用是恢复工作簿左上角图标和右上角最小化/最大化/关闭按钮;语句RestoreWindowX的作用是恢复工作表左上角图标和右上角最小化/最大化/关闭按钮。可以根据上述语句的作用,将程序适当调整,只移除其中某项图标和按钮。
程序代码如下:

‘******声明部分******
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
发表于 2011-8-3 13:29 | 显示全部楼层
回复

使用道具 举报

发表于 2012-3-10 19:40 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-9-24 22:39 , Processed in 0.578310 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表