2008-10-30 67 views
1

我正在更新VBA程序(excel)。在启动程序检查它是否能够找到一个目录这是在使用了办公文件服务器:VBA如何检查局域网环境并取消检查

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

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

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

我的问题(S):

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

  2. 有没有办法让用户取消由FolderExists()完成的搜索,当他知道由于他们不在办公室而无法成功时,他会执行搜索。即有没有我想要的解决方案有尽可能少的用户输入成为可能,这就是为什么检查是自动完成的一些方法来提前退出FolderExists()(或任何其他函数调用为此事)

,而而不仅仅是询问用户他是否在办公室或者不在首位。

回答

3

如果你在一个领域:

检查LOGONSERVER环境变量。

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

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

如果你不是一个域:

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

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

MVPS.ORGMSDN Forums都有一些代码示例为,

+0

问题是我们没有使用活动目录。这只是一堆PC和笔记本电脑以及一个桑巴服务器。 'echo%LOGONSERVER%'返回'\\ ' – Loopo 2008-10-30 14:20:35

0

我使用Dir命令,在服务器上的目标共享文件夹和捕捉错误时未找到。

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