2014-02-24 2 views
0

사용자가이를 실행할 때 열리고 네트워크 드라이브의 다른 파일에 새 데이터를 쓰는 VBA 스크립트가 있습니다. 때때로 다른 사용자가 동시에 열려고 시도하기 때문에 (스크립트는 VBA 스크립트를 통해 읽기만 사용하여)이 파일에 액세스하여 새 데이터를 쓸 수 없습니다.VBA가 파일을 열 수없는 경우의 대체 메시지

이 특정 파일 열기 오류는 오류 처리 코드에서 발견되지 않고 상자가 나타나서 사용자에게 종료 또는 디버그를 요청합니다. "요청을 처리 할 수 ​​없습니다. 잠시 후 다시 시도하십시오."와 같은 대체 팝업 상자를 표시하는 방법이 있습니까?

+2

[이 도움말 (http://stackoverflow.com/questions/9373082/detect-whether-excel-workbook-is-already-open-using-vba/9373914#9373914)을 통해 도움을 얻을 수 있습니다. –

+0

예 있습니다. 우리가 도울 수있는 몇 가지 코드를 보여주십시오. –

+0

이미 열 때 문제가 발생하지 않습니다. 그것은 두 명의 다른 사람들이 정확히 같은 시간에 열려고 할 때입니다. 벌어지고있는 충돌이 있습니다. – Josh

답변

0

예. 파일 열기 코드 주변에 오류 처리를 넣습니다. 같은 :

on error goto FileError 
    'file opening code 
on error goto 0 


exit sub 
FileError: 
    msgbox("Could not process request. Please wait a few seconds and try again") 

기본적으로의 OnError은 오류의 경우에 지정 무엇이든 할 수있는 그 진술 후 모든 것을 알려줍니다. 이 경우 onError 처리가 중지되고 FileError이라고 표시된 행으로 이동 한 후에 오류가 발생하면 goto FileError을 입력했습니다.

OnError goto 0은 오류 핸들을 비활성화합니다. 그런 식으로 다른 코드가 오류를 생성하면 FileError 핸들에 의해 처리되지 않을 것입니다. onerror의 다른 옵션은 OnError Resume Next이며 프로그램이 오류를 생성하는 코드를 건너 뜁니다. 그래서 그것은 오류를 던지지 않을 것이며, 그것은 처리를 계속할 것입니다.

FileError 레이블 앞에 Exit Sub 레이블이 있습니다. 오류가 발생하여 코드가 전송되지 않는 한 코드는 FileError 레이블로 이동하지 않습니다.

관련 문제