1

VBAプログラム(エクセル)を更新しています。起動時に、プログラムは以下を使用して、オフィス ファイル サーバー上にあるディレクトリを見つけることができるかどうかを確認します。

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

これが見つからない場合、プログラムはオフライン モードに切り替わり、その出力をファイル サーバーに直接保存するのではなく、(後で転送するために) ローカル ハード ディスクに保存します。

これは問題なく動作します。コンピューターがパスに到達できる場合は非常に高速ですが、FolderExists への呼び出しが完了するまで (最大 1 分) 時間がかかることがあります。特に、ネットワーク接続が開いているが、必要なパスが存在しません (つまり、他の LAN に接続しています)。

私の質問:

  1. VBA を使用してネットワーク パスの存在を確認する、より迅速で適切な方法はありますか?

  2. ユーザーがオフィスにいないために成功できないことがわかっているときに、FolderExists() によって行われた検索をユーザーにキャンセルさせる方法はありますか。つまり、FolderExists() (またはそのための他の関数呼び出し) を途中で終了する方法はありますか?

ユーザーの入力をできるだけ少なくしたいので、そもそもオフィスにいるかいないかをユーザーに尋ねるだけでなく、チェックが自動的に行われます。

4

2 に答える 2

3

ドメインにいる場合:

LOGONSERVER 環境変数を確認します。

サーバー名の前に「\」記号が 2 つある場合は、Active Directory に接続されているため、確認する必要があります。

それ以外の場合は、オフィス ネットワークにログインしていないため、チェックをバイパスできます。

ドメインに参加していない場合:

おそらく最善の策は、ターゲット サーバーに対して ping を実行することです。

ping 応答を取得できない場合は、ネットワークに接続されていないか、あなたのネットワークに接続されていないか、サーバーがダウンしています。そのような場合、コードをどちらの方法でも実行したくありません。

MVPS.ORGMSDN フォーラムの両方に、そのためのコード サンプルがいくつかあります。

于 2008-10-30T13:47:28.203 に答える
0

コマンドを使用しDirて、サーバー上の共有フォルダーをターゲットにし、見つからない場合にエラーをトラップします。

Dir("\\Servername\aFolder\", vbDirectory)
于 2012-07-03T07:47:09.117 に答える