質問

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

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

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

これは問題なく機能します。コンピューターがパスに到達できれば非常に高速ですが、FolderExistsへの呼び出しが完了する/タイムアウトするまでに時間がかかる場合があります(特にネットワーク接続がある場合)開いているが、必要なパスが存在しない(つまり、他のLANに接続されている)。

私の質問:

  1. VBAを使用してネットワークパスの存在を確認するためのより迅速/より良い方法はありますか?

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

ソリューションにユーザー入力をできるだけ少なくしたいので、最初にオフィスにいるかどうかをユーザーに尋ねるのではなく、チェックが自動的に行われます。

役に立ちましたか?

解決

ドメインを使用している場合:

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

サーバー名の前に2つの「\」記号がある場合、サーバーはアクティブディレクトリに接続されているため、確認する必要があります。

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

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

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

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

MVPS.ORG および MSDNフォーラムには両方ともコードがありますそのためのサンプル、

他のヒント

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

Dir("\\Servername\aFolder\", vbDirectory)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top