vba - 在 Vba 中修改是/否选项

标签 vba

MsgBox " Select Any of the two Options "
MyNote = "Which type of file ?"
Answer = MsgBox(MyNote, vbQuestion + vbYesNo, "")
If Answer = vbNo Then
    Call A()
Else 
    Call B()

一切正常,但我只想将是/否选项的外观更改为 A 和 B,以便用户更好地了解为哪个文件选择哪个选项。

最佳答案

正如评论的那样,您可以使用 API 作为讨论 HERE .

我在下面发布了代码,以防万一链接关闭并合并了您的代码。哈。

Option Explicit

' Import
Private Declare Function GetCurrentThreadId Lib "kernel32" () 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 UnhookWindowsHookEx Lib "user32" _
    (ByVal hHook As Long) As Long

' Handle to the Hook procedure
Private hHook As Long

' Hook type
Private Const WH_CBT = 5
Private Const HCBT_ACTIVATE = 5

' Constants
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
Public Sub Test()
    ' Set Hook
    hHook = SetWindowsHookEx(WH_CBT, _
                             AddressOf MsgBoxHookProc, _
                             0, _
                             GetCurrentThreadId)

    ' Run MessageBox
    MyNote = "Which type of file ?"
    Answer = MsgBox(MyNote, vbQuestion + vbYesNo, "Select Any of the two options")
    If Answer = vbNo Then Call A() Else Call B()

End Sub
Private Function MsgBoxHookProc(ByVal lMsg As Long, _
                                ByVal wParam As Long, _
                                ByVal lParam As Long) As Long

    If lMsg = HCBT_ACTIVATE Then
        SetDlgItemText wParam, IDYES, "A" '~~> replacement for Yes
        SetDlgItemText wParam, IDNO, "B" '~~> replacement for No

        ' Release the Hook
        UnhookWindowsHookEx hHook
    End If

    MsgBoxHookProc = False
End Function

但是,如果您使用的是 64 位,则需要添加 PtrSafe .

关于vba - 在 Vba 中修改是/否选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25294483/

相关文章:

arrays - 将数组的结果写入下一个可用单元格

excel - 如何使用代码关闭打印预览页面

vba - 使用 Shell 函数运行 exe 时找不到文件错误

ms-access - Access 97中如何使用VBA浏览文件?

sql - Excel VBA 在Where子句之间使用

vba - 如何在 Excel 中将一系列单元格从十进制转换为十六进制

excel - 使用相对引用将公式从 [1,X] 范围复制到 [Y,X] 范围

json - VBA-JSON : Add entry to Existing File

excel - 在 VBA 中将工作表作为变量从一个子过程传递到另一个子过程

excel - 使用循环中的单个单元格作为触发器来复制多个范围 VBA