2009-11-19 60 views
1

我已經用C++編寫了Excel COM加載項,用於使用VBA自動化Excel。它包含一個自己的對話框,顯示有關加載項的一些常規信息。 現在我在Excel中創建一個打開對話框的按鈕。使用轉義鍵保留對話框會導致Excel消息,腳本正在被中斷,而不是僅僅關閉對話框。我可以抑制中斷消息:Excel COM加載項對話框中斷腳本

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) 

非常感謝!

回答

1

對話框應該返回它們的退出狀態到調用例程而不是允許終止代碼執行。因此,我建議你

  • 轉換您ShowAboutDlgSub()Function()
  • 返回一個常數了VbMsgBoxResult枚舉集(避免硬編碼!)
  • 陷阱ESC鍵在您的對話框,並返回一個VbCancel(或VbAbort

好運 拾音