2009-11-19 2 views
1

VBA와 함께 Excel 자동화를 위해 Excel COM 추가 기능을 C++로 작성했습니다. 추가 기능에 대한 몇 가지 일반 정보를 보여주는 대화 상자가 있습니다. 이제 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

대화 상자는 코드 실행을 종료하는 대신 종료 상태를 호출 루틴으로 반환해야합니다. 그래서 나는 VbMsgBoxResult 열거 세트 중 상수를 반환하여 ShowAboutDlg에서 Sub()Function()

  • 로 변환

    • 에 당신을 제안하여 대화 상자에서
    • 트랩 ESC 키를 (! 하드 코딩을 피하기)과를 반환 VbCancel (또는 VbAbort)

    행운 마이킹

  • 관련 문제