문제

Excel에서 외부 프로그램을 실행하는 가장 좋은 방법은 무엇입니까?몇 분 동안 실행될 수 있습니다.이 문제를 해결하는 가장 좋은 방법은 무엇입니까?이상적으로는,

  1. 프로세스가 실행 중임을 사용자에게 알려주는 모델 대화 상자입니다.
  2. 실행 파일이 실패하면 사용자는 알림을 받아야 합니다.
  3. 시간 초과를 적용해야 합니다.
  4. 취소 버튼이 대화 상자에 있어야 합니다.

그러나 어떤 모범 사례라도 환영합니다..dll 또는 .exe를 호출하는 솔루션에 관심이 있습니다.Excel '03 이하에서 작동하는 것이 바람직하지만 이후 버전으로 이동해야 하는 이유도 듣고 싶습니다.

도움이 되었습니까?

해결책

다음 두 가지 Microsoft KB 기사를 확인하세요.

Visual Basic에서 Win32 응용 프로그램을 시작하는 방법그리고

32비트 응용 프로그램을 사용하여 셸 프로세스 종료 시기를 결정하는 방법

둘 다 프로세스를 시작한 다음 완료를 확인할 수 있는 프레임워크를 신속하게 제공합니다.각 KB 문서에는 관련이 있을 수 있는 몇 가지 추가 참조 자료가 있습니다.

후자의 기술 자료 문서에서는 쉘 프로세스가 끝날 때까지 무한한 시간을 기다리고 싶다고 가정합니다.

ret& = WaitForSingleObject(proc.hProcess, INFINITE) 함수 호출을 수정하여 밀리초 단위의 유한한 시간 후에 반환할 수 있습니다. INFINITE를 밀리초를 나타내는 양수 값으로 바꾸고 전체를 Do While 루프로 래핑합니다.반환 값은 프로세스가 완료되었는지 또는 타이머가 종료되었는지 알려줍니다.프로세스가 종료되면 반환 값은 0이 됩니다.

반환 값이 0이 아닌 경우 프로세스는 계속 실행 중이지만 제어권은 애플리케이션에 다시 제공됩니다.이 시간 동안 애플리케이션을 긍정적으로 제어할 수 있는 동안 일종의 UI 상태 업데이트 여부, 취소 확인 등을 결정할 수 있습니다.아니면 다시 순환하고 좀 더 기다릴 수 있습니다.

쉘링하려는 프로그램이 자신이 작성한 프로그램인 경우 추가 옵션도 있습니다.해당 창 중 하나에 연결하여 프로그램이 첨부하여 상태 피드백으로 사용할 수 있는 메시지를 게시하도록 할 수 있습니다.고려해야 할 경우 별도의 항목으로 남겨두는 것이 가장 좋습니다.

프로세스 구조를 사용하여 호출된 프로세스에서 반환 값을 얻을 수 있습니다.이것이 유용하려면 프로세스에서 값을 반환해야 합니다.

이러한 종류의 요구에 대한 나의 일반적인 접근 방식은 다음과 같습니다.

  1. 취소 버튼을 사용하여 프로세스 시작 시 사용자에게 비모달 상태 대화 상자를 제공합니다. 취소 버튼을 클릭하면 나중에 확인할 플래그가 설정됩니다.사용자에게 상태를 제공하는 것은 불가능할 가능성이 높으므로 경과 시간이나 애니메이션 GIF 중 하나를 제공하는 것이 기대치를 관리하는 데 도움이 될 수 있습니다.
  2. 프로세스 시작
  3. 프로세스가 완료될 때까지 기다려 500ms마다 취소 확인을 허용합니다.
  4. 프로세스가 완료되면 대화 상자를 닫고 계속 진행하세요.
  5. 프로세스가 완료되지 않은 경우 사용자가 취소를 눌렀는지 확인하고 그렇다면 프로세스 창에 닫기 메시지를 보냅니다.이 방법은 작동하지 않을 수 있으며 프로세스를 종료해야 할 수도 있습니다. 이 작업을 수행할 경우 주의하세요.가장 좋은 방법은 프로세스가 제대로 닫히지 않으면 프로세스를 중단하는 것입니다.이 시점에서 시간 초과를 확인하고 사용자가 취소를 누른 것과 동일한 경로를 시도해 볼 수도 있습니다.

이것이 도움이되기를 바랍니다, 빌.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top