Excel COM加载项对话框中断脚本

我已经用C ++编写了一个Excel COM加载项,用于使用VBA自动化Excel。 它包含一个自己的对话框,显示有关加载项的一些一般信息。 现在我在Excel中创build一个button,打开对话框。 使用退出键保留对话框将导致Excel消息,脚本被中断,而不是仅仅closures对话框。 我可以用下面的方法抑制中断信息:

Application.EnableCancelKey = xlDisabled 

但是,这似乎不是解决scheme,因为脚本不能再被打断了。
这里是我如何使用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; } 

该对话框创build于:

 DialogBox(g_hModule, MAKEINTRESOURCE(IDD_ABOUT), hWndParent, (DLGPROC)AboutDlg) 

非常感谢!

对话框应该返回到调用例程的退出状态,而不是允许终止代码执行。 所以我build议你

  • 将您的ShowAboutDlgSub()转换为Function()
  • VbMsgBoxResult枚举集返回一个常量(避免硬编码!)
  • 将ESC键置于对话框中并返回一个VbCancel (或VbAbort

祝你好运MikeD