Вопрос

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

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

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

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

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

<Ол>
  • Есть ли более быстрый / лучший способ проверить наличие сетевого пути с помощью VBA?

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

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

    Это было полезно?

    Решение

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

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

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

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

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

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

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

    MVPS.ORG и Форумы MSDN оба имеют некоторый код образцы для этого,

    Другие советы

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

    Dir("\\Servername\aFolder\", vbDirectory)
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top