1

我正在更新一个 VBA 程序(excel)。在启动时,程序检查它是否可以使用以下命令找到办公室文件服务器上的目录:

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

如果没有找到,程序切换到离线模式并将其输出保存到本地硬盘(供以后传输),而不是直接保存到文件服务器。

这工作正常,如果计算机可以到达路径,它会非常快,但是有时可能需要一段时间(最多一分钟)才能完成对 FolderExists 的调用/超时,特别是如果有网络连接打开但所需路径不存在(即我们连接到其他 LAN)。

我的问题:

  1. 有没有更快/更好的方法来检查是否存在使用 VBA 的网络路径?

  2. 有没有办法让用户取消 FolderExists() 完成的搜索,因为他知道它不能成功,因为他们不在办公室。即是否有某种方法可以过早退出 FolderExists() (或任何其他函数调用)

我希望解决方案的用户输入尽可能少,这就是为什么检查会自动完成,而不是首先询问用户他是否在办公室。

4

2 回答 2

3

如果您在域上:

检查 LOGONSERVER 环境变量。

如果服务器名称前有两个“\”符号,则它已连接到活动目录,因此您应该进行检查。

否则,它没有登录到办公网络,因此您可以绕过检查。

如果您不在域中:

最好的选择可能是对目标服务器运行 ping。

如果它无法获得 ping 响应,则它要么未连接到网络,要么未连接到您的网络,或者服务器已关闭。在这些情况下,您不希望您的代码以任何一种方式运行。

MVPS.ORGMSDN 论坛都有一些代码示例,

于 2008-10-30T13:47:28.203 回答
0

我使用Dir命令,定位服务器上的共享文件夹并在找不到时捕获错误。

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