ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何去除MsgBox函数对话框的关闭按钮?

如何去除MsgBox函数对话框的关闭按钮?

作者:绿色风 分类: 时间:2022-08-17 浏览:85
楼主
amulee
Q:如何去除MsgBox函数对话框的关闭按钮?
A:效果如图所示:

 

利用API钩子来实现,原理类似于制作密码输入的InputBox。找到了窗体,当然就可以设置咯,可以设置很多有趣的功能,详见:[Excel VBA] 利用API对VBA窗体进行设置 http://www.exceltip.net/thread-6982-1-1.html


代码如下:
  1. 'API声明
  2. Option Explicit
  3. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  4. Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
  5. Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
  6. Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
  7. Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
  8. Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
  9. Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
  10. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  11. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  12. '常数声明
  13. Private Const WH_CBT = 5
  14. Private Const HCBT_ACTIVATE = 5
  15. Private hHook As Long
  16. '由于要查找窗体,标题写在这里
  17. Private Const MsgTitle As String = "标题"
  18. Private Const WM_SYSCOMMAND = &H112 '窗体设置
  19. Private Const SC_MAXIMIZE = &HF030& '最大化窗体
  20. Private Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  21.     If nCode = HCBT_ACTIVATE Then
  22.         '设置窗体样式为无按钮
  23.         SetWindowLong FindWindow(vbNullString, MsgTitle), -16, &H6C10000
  24.     End If
  25.     '以下这行确保其他钩子能够被正确调用
  26.     CallNextHookEx hHook, nCode, wParam, lParam
  27. End Function
  28. '自定义MsgBox函数
  29. Public Function MyMsgBox(Optional Prompt As String, Optional VbMsgBoxStyle As VbMsgBoxStyle, Optional Title As String)
  30.     '钩子
  31.     hHook = SetWindowsHookEx(WH_CBT, AddressOf HookProc, GetModuleHandle(vbNullString), GetCurrentThreadId)
  32.     '调用Msgbox函数
  33.     MyMsgBox = MsgBox(Prompt, VbMsgBoxStyle, Title)
  34.     '取消钩子
  35.     UnhookWindowsHookEx hHook
  36. End Function
  37. '示例程序
  38. Sub Main()
  39.     MyMsgBox "OK", vbOKOnly, MsgTitle
  40. End Sub
附件下载:
去除关闭按钮的Msgbox.rar
2楼
い卋玑┾宝珼
辛苦了,谢谢分享
3楼
kangguowei
代码不少.

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap