我正在更新VBA程序(excel)。启动时,程序检查是否可以使用在办公室文件服务器上找到一个目录
FileSystemObject.FolderExists("\servernamepath")
如果没有找到,程序将切换到脱机模式,并将其输出保存到本地硬盘(以便稍后传输),而不是直接保存到文件服务器。
这工作正常,如果计算机能够到达该路径,它会很快,但有时对FolderExists的调用可能需要一段时间(最多一分钟)才能完成/超时,特别是如果有网络连接打开,但所需的路径不存在(即,我们连接到其他LAN)。
我的问题:
有没有一种更快/更好的方法可以使用VBA检查网络路径的存在?
当用户知道由于不在办公室而无法成功时,有没有办法让用户取消FolderExists()进行的搜索。也就是说,有没有办法提前退出FolderExists()(或任何其他函数调用)
我希望该解决方案的用户输入尽可能少,这就是为什么检查是自动完成的,而不仅仅是询问用户是否在办公室。
如果您在域上:
检查LOGONSERVER环境变量。
如果服务器名称前面有两个"\"符号,则表示它已连接到active directory,因此您应该进行检查。
否则,它不会登录到办公网络,因此您可以绕过检查。
如果您不在域上:
也许你最好的办法是对目标服务器运行ping。
如果它无法获得ping响应,则说明它未连接到网络,未连接到您的网络,或者服务器已关闭。在这种情况下,您不希望代码以任何一种方式运行。
MVPS.ORG和MSDN论坛都有一些代码示例,
我使用Dir
命令,以服务器上的共享文件夹为目标,并在找不到错误时捕获错误。
Dir("\ServernameaFolder", vbDirectory)