ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7974|回复: 15

[分享] 自定义Msgbox按钮文字

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-27 16:50 | 显示全部楼层 |阅读模式
网上琢磨了半天,终于摸清楚了。上代码。
感谢下面的网址上来源代码启示。
http://www.vbgood.com/thread-72093-1-1.html
http://www.office-cn.net/forum.p ... 3D1&page=1&
https://blog.csdn.net/guorong520/article/details/89400745
从网上下载下来的是两个按钮的,想搞多个按钮的,下面代码是三个按钮的。
直接复制下面所有代码到模块内,运行test
整个代码的框架就看第3个链接一目了然。语言都有类似性。
如果需要换图标,也可以换的。
'================以下为Msgbox自定义按键文字代码  1/3 Parts    之Declare 部份 ↓↓↓↓↓↓↓↓↓↓==========================

Private sButton1 As String
Private sButton2 As String
Private sButton3 As String
Private sCaption As String
Private sText As String
Private Const MB_ICONQUESTION As Long = &H20&     'QUESTION图标  这里不要改动
'Private Const MB_OKCANCEL As Long =&H1&         'OKCANCEL    这里的赋值不要改动
Private Const MB_YESNOCANCEL As Long = &H3&      'YESNOCANCEL   这里赋值不要改动


Private Const MB_TASKMODAL As Long = &H2000&
Private Const IDPROMPT = &HFFFF&
Private Const WH_CBT = 5
Private Const GWL_HINSTANCE = (-6)
Private Const HCBT_ACTIVATE = 5
'Private Const HCBT_ACTIVATE = 6
Private Type MSGBOX_HOOK_PARAMS
    hwndOwner As Long
    hHook As Long
End Type
Private MSGHOOK As MSGBOX_HOOK_PARAMS
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Private Declare Function SetDlgItemText Lib "user32" Alias "SetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String) As Long
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
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Const IDOK = 1
Public Const IDCANCEL = 2
Public Const IDABORT = 3
Public Const IDRETRY = 4
Public Const IDIGNORE = 5
Public Const IDYES = 6
Public Const IDNO = 7


'================以上为Msgbox自定义按键文字代码  1/3 Parts    之Declare 部份 ↑↑↑↑↑↑↑==========================


'================以上为Msgbox自定义按键文字代码  2/3 Parts  之Function 部份 ↓↓↓↓↓↓↓==========================
Private Function myMessageBox(hwndThreadOwner As Long, hwndOwner As Long, strCaption As String, strText As String, strButton1 As String, strButton2 As String, strButton3 As String) As Long
'上面的声明根据按钮的多少增删
    sButton1 = strButton1  '根据按钮的多少增删
    sButton2 = strButton2   '根据按钮的多少增删
    sButton3 = strButton3   '根据按钮的多少增删
    sCaption = strCaption
    sText = strText
    Dim hInstance As Long, hThreadId As Long
     hInstance = GetWindowLong(hwndThreadOwner, GWL_HINSTANCE)
    hThreadId = GetCurrentThreadId()
    With MSGHOOK
        .hwndOwner = hwndOwner
        .hHook = SetWindowsHookEx(WH_CBT, AddressOf MsgBoxHookProc, hInstance, hThreadId)
    End With
  '  myMessageBox = MessageBox(hwndOwner, Space$(120), Space$(120), MB_OKCANCEL Or MB_ICONQUESTION)
    myMessageBox = MessageBox(hwndOwner, Space$(120), Space$(120), MB_YESNOCANCEL Or MB_ICONQUESTION)

End Function
Private Function MsgBoxHookProc(ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If uMsg = HCBT_ACTIVATE Then
        SetWindowText wParam, sCaption        
        SetDlgItemText wParam, IDYES, sButton1    '第1个按键
        SetDlgItemText wParam, IDNO, sButton2     '第2个按键
        SetDlgItemText wParam, IDCANCEL, sButton3   '第3个按键
        SetDlgItemText wParam, &HFFFF&, sText
        UnhookWindowsHookEx MSGHOOK.hHook    '这句Unhook千万不能误删,否则会有意想不到的后果。
    End If
    MsgBoxHookProc = False
End Function
'================以上为Msgbox自定义按键文字代码    2/3 Parts  之Function 部份   ↑↑↑↑↑↑↑==========================

'================以上为Msgbox自定义按键文字代码  3/3 Parts  之调用过程 部份 ↓↓↓↓↓↓↓==========================
Sub test()
'这一过程为验证测试代码
Dim msg As Long
msg = myMessageBox(0, GetDesktopWindow(), "Question", "Which one do you love,Word or Excel or PPT?", "Excel", "Word", "PPT")
'MsgBox msg
If msg = 6 Then myMessageBox 0, GetDesktopWindow(), "I love Excel", "Which Version?", "Excel 97", "Excel 2007", "Excel 2016"
If msg = 7 Then myMessageBox 0, GetDesktopWindow(), "I love Word", "Which Version?", "Word 97", "Word 2007", "Word 2016"
If msg = 2 Then myMessageBox 0, GetDesktopWindow(), "I love PPT", "Which Version?", "PPT 97", "PPT 2007", "PPT 2016"

End Sub
'================以上为Msgbox自定义按键文字代码    3/3 Parts  之调用过程  部份   ↑↑↑↑↑↑↑==========================





DIY MessageBox Button Caption.rar

13.31 KB, 下载次数: 218

自定义MessageBox按钮显示的文字

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-9-27 17:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
除了自嗨一下别人可能毫不在意

TA的精华主题

TA的得分主题

发表于 2019-9-27 17:11 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我的意思是,仅仅为了一个无关紧要的按钮文字塞上这么一大坨代码有点儿得不偿失

TA的精华主题

TA的得分主题

发表于 2019-9-27 20:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不知费这么大劲有什么实际意义,

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-27 21:17 | 显示全部楼层
小花鹿 发表于 2019-9-27 20:02
不知费这么大劲有什么实际意义,

自己写的有一点费劲,写好了放在一个模块以后拿来用也省事的。写的代码有时候会给别人用,交互的时候,为了别人理解更方便嘛,不用在Tittle 上搞一堆文字,按钮上选择更简洁明了。

TA的精华主题

TA的得分主题

发表于 2019-9-27 23:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
除了自己玩玩,好像没有什么分享的价值吧?

TA的精华主题

TA的得分主题

发表于 2020-5-15 12:40 | 显示全部楼层
说没有价值的是你自己没机会用到而已,不要代表所有人,难道你这种否定别人的劳动成果的做法就很高级吗?

TA的精华主题

TA的得分主题

发表于 2020-7-26 09:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
个人觉得还是有价值的

TA的精华主题

TA的得分主题

发表于 2020-8-20 19:04 | 显示全部楼层
我觉得挺好的,谢谢楼主。不知道你们为什么要嘲讽。

TA的精华主题

TA的得分主题

发表于 2020-10-2 12:46 | 显示全部楼层
有用.感谢楼主分享.
本来也是想要改按钮上的文字的,看到楼主的分享,果断放弃,省了不少功夫
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 11:42 , Processed in 0.038624 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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