2008-10-30 9 views
1

Je suis mise à jour un programme VBA (excel). Au démarrage, le programme vérifie si elle peut trouver un répertoire qui se trouve sur le serveur de fichiers de bureau en utilisant:VBA comment vérifier l'environnement LAN et Annuler la vérification

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

Si cela ne se trouve pas le programme passe en mode hors ligne et enregistre sa sortie sur le disque dur local (pour un transfert ultérieur), au lieu de directement sur le serveur de fichiers. Cela fonctionne très bien, il est très rapide si l'ordinateur peut atteindre le chemin, mais il peut parfois prendre un certain temps (jusqu'à une minute) pour l'appel à FolderExists pour terminer/expirer, surtout s'il y a un réseau connexion ouverte mais le chemin requis n'existe pas (c'est-à-dire que nous sommes connectés à un autre réseau local).

Ma question (s):

  1. est-il plus rapide/meilleure façon de vérifier l'existence d'un chemin réseau à l'aide VBA?

  2. Y at-il un moyen pour que l'utilisateur annule la recherche effectuée par FolderExists() quand il sait qu'il ne peut pas réussir parce qu'ils ne sont pas au bureau. C'est à dire. est-il possible de sortir prématurément FolderExists() (ou tout autre appel de fonction pour cette matière)

Je veux la solution pour avoir aussi peu d'entrée de l'utilisateur que possible, ce qui est la raison pour laquelle le chèque est fait automatiquement, plutôt que de simplement demander à l'utilisateur s'il (ou elle) est au bureau ou non en premier lieu.

Répondre

3

Si vous êtes sur un domaine:

Vérifiez la variable d'environnement LOGONSERVER.

S'il y a deux symboles '\' devant le nom du serveur, celui-ci est connecté au répertoire actif et vous devriez donc faire votre vérification.

Sinon, il n'est pas connecté au réseau de l'entreprise, vous pouvez donc contourner la vérification.

Si vous n'êtes pas sur un domaine:

probablement votre meilleur pari est d'exécuter une commande ping sur le serveur cible.

S'il ne peut pas obtenir une réponse ping, il n'est pas connecté au réseau, n'est pas connecté à votre réseau ou le serveur est hors service. Vous ne voulez pas que votre code fonctionne dans les deux cas.

MVPS.ORG et MSDN Forums ont tous deux des exemples de code pour cela,

+0

Le problème est que nous n'utilisons pas de répertoire actif. C'est juste un tas de PC et d'ordinateurs portables et un serveur de samba. 'echo% LOGONSERVER%' renvoie '\\ ' – Loopo

+0

Ah. Ok, et bien, qu'en est-il de la solution ping? Ping le serveur prendra une seconde ou deux. Beaucoup plus facile à traiter que le temps d'attente potentiel associé à FolderExists. –

+0

Juste testé la solution de ping, fonctionne comme un rêve et rapide .. maintenant pourquoi je ne pense pas à cela? Merci Kevin! – Loopo

0

j'utiliser la commande Dir, ciblant un dossier partagé sur le serveur et le piégeage de l'erreur lorsque introuvable.

Dir("\\Servername\aFolder\", vbDirectory)