我在C ++中编写了一个Excel COM加载项,用于使用VBA实现Excel自动化。它包含一个自己的对话框,显示有关加载项的一些常规信息。 现在我在Excel中创建一个按钮,打开对话框。使用转义键保留对话框会导致Excel消息,即脚本正在被中断,而不是仅关闭对话框。我可以用以下方法来抑制中断消息:
Application.EnableCancelKey = xlDisabled
但这似乎不是解决方案,因为脚本不能再被打断了 以下是我使用VBA打开对话框的示例:
Private Sub ShowAboutDialog_Click()
Dim oComAddIn As COMAddIn
Set oComAddIn = Application.COMAddIns.Item("MyComAddIn.Example")
oComAddIn.Connect = True
Call oComAddIn.Object.ShowAboutDlg
End Sub
我的猜测是问题出现在对话框的消息处理程序中:
INT_PTR CALLBACK CAboutDialog::AboutDlg(
HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
...
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
// Here, the ESCAPE key should also be trapped?
EndDialog(hwndDlg, LOWORD(wParam));
return TRUE;
}
...
}
return FALSE;
}
使用以下命令创建对话框:
DialogBox(g_hModule, MAKEINTRESOURCE(IDD_ABOUT), hWndParent, (DLGPROC)AboutDlg)
非常感谢!
答案 0 :(得分:1)
对话框应将其退出状态返回到调用例程,而不是允许终止代码执行。所以我建议你
ShowAboutDlg
从Sub()
转换为Function()
VbMsgBoxResult
枚举集中返回一个常量(避免硬编码!)VbCancel
(或VbAbort
)