Проверка среды LAN и проверка отмены - PullRequest
1 голос
/ 30 октября 2008

Я обновляю программу VBA (Excel). При запуске программа проверяет, может ли она найти каталог, находящийся на офисном файловом сервере, используя:

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

Если это не найдено, программа переключается в автономный режим и сохраняет свои выходные данные на локальный жесткий диск (для последующей передачи), а не непосредственно на файловый сервер.

Это работает хорошо, это очень быстро, если компьютер может найти путь, однако иногда может потребоваться некоторое время (до одной минуты) для завершения / тайм-аута вызова FolderExists, особенно при наличии сетевого подключения открыт, но требуемый путь не существует (т. е. мы подключены к другой локальной сети).

Мой вопрос (ы):

  1. Есть ли более быстрый / лучший способ проверить наличие сетевого пути с использованием VBA?

  2. есть ли способ заставить пользователя отменить поиск, выполненный FolderExists (), когда он (она) знает, что он не может быть успешным, потому что они не в офисе. То есть Есть ли способ преждевременного выхода из FolderExists () (или любой другой вызов функции в этом отношении)

Я хочу, чтобы в решении было как можно меньше пользовательского ввода, поэтому проверка выполняется автоматически, а не просто спрашивает пользователя, находится ли он в офисе или нет.

Ответы [ 2 ]

3 голосов
/ 30 октября 2008

Если вы находитесь на домене:

Проверьте переменную среды LOGONSERVER.

Если перед именем сервера есть два символа '\', значит, он подключен к активной директории, и вам следует проверить.

В противном случае он не подключен к офисной сети, поэтому вы можете обойти проверку.

Если вы не находитесь в домене:

Вероятно, вам лучше всего выполнить пинг против целевого сервера.

Если он не может получить ответ на эхо-запрос, он либо не подключен к сети, либо не подключен к ВАШЕЙ сети, либо сервер не работает. В этих случаях вы не хотите, чтобы ваш код выполнялся в любом случае.

MVPS.ORG и Форумы MSDN оба имеют несколько примеров кода для этого,

0 голосов
/ 03 июля 2012

Я использую команду Dir, нацелив ее на общую папку на сервере и перехватывающую ошибку, когда не найдена.

Dir("\\Servername\aFolder\", vbDirectory)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...