문제

VBA 프로그램 (Excel)을 업데이트하고 있습니다. 시작시 프로그램은 다음을 사용하여 Office 파일 서버에있는 디렉토리를 찾을 수 있는지 확인합니다.

FileSystemObject.FolderExists("\\servername\path")

이를 찾을 수없는 경우 프로그램이 오프라인 모드로 전환하고 파일 서버가 직접 대신 출력을 로컬 하드 디스크 (나중 전송)에 저장합니다.

컴퓨터가 경로에 도달 할 수 있다면 매우 빠르지 만, 특히 네트워크 연결이 열려있는 경우, FolderExists에 대한 호출이 완료/타임 아웃하는 데 시간이 걸릴 수 있습니다. 필요한 경로는 존재하지 않습니다 (즉, 다른 LAN에 연결되어 있습니다).

내 질문 :

  1. VBA를 사용하여 네트워크 경로의 존재를 확인하는 더 빠르고 더 좋은 방법이 있습니까?

  2. FolderExists ()가 수행 한 검색을 취소 할 수있는 방법이 있습니까? 즉, FolderExists () (또는 그 문제에 대한 다른 기능 호출)를 조기에 종료 할 수있는 방법이 있습니다.

솔루션이 가능한 한 적은 사용자 입력을 갖기를 원하기 때문에 사용자에게 사무실에 있는지 여부를 묻지 않고 확인이 자동으로 수행되는 이유입니다.

도움이 되었습니까?

해결책

도메인에있는 경우 :

LogonServer 환경 변수를 확인하십시오.

서버 이름 앞에 두 개의 ''기호가있는 경우 Active Directory에 연결되어 있으므로 수표를 수행해야합니다.

그렇지 않으면 사무실 네트워크에 로그인되지 않으므로 수표를 우회 할 수 있습니다.

도메인에 있지 않은 경우 :

아마도 가장 좋은 방법은 대상 서버에 대해 핑을 실행하는 것입니다.

Ping 응답을 얻을 수없는 경우 네트워크에 연결되지 않았거나 네트워크에 연결되어 있지 않거나 서버가 다운되었습니다. 당신은 당신의 코드가 어떤 방식 으로든 실행되기를 원하지 않습니다.

mvps.org 그리고 MSDN 포럼 둘 다이를위한 코드 샘플이 있습니다.

다른 팁

나는 그것을 사용한다 Dir 명령, 서버의 공유 폴더를 타겟팅하고 찾을 수없는 경우 오류를 트레이션합니다.

Dir("\\Servername\aFolder\", vbDirectory)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top