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/