我们使用VPN连接到工作网络。我有一个映射的网络驱动器,连接后立即在“我的电脑”中显示“已断开网络驱动器”。在此状态下,我运行VBA例程:
Dim dr As String: dr = "F:\T\"
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(dr) Then
Call fso.CreateFolder(dr)
End If
尽管文件夹确实存在,但fso认为它不存在,因此它尝试创建文件夹并抛出错误:运行时错误76:路径未找到。当然,它找不到它,因为它处于断开连接的状态。使用该网络驱动器的任何其他操作也将失败。
因此,我打开“我的电脑”并手动双击网络驱动器。它连接得很好,再次运行代码时不再出错。但这是有问题的。我需要代码中的解决方案来自动连接网络驱动器。
可能的解决方案1:
只需使用UNC路径而不是映射的驱动器号。问题是我不知道路径是什么,也不想使用UNC;代码需要灵活,以便在驱动器映射到的任何地方工作。这是来自高层的政策。
可能的解决方案2:
使用Net Use或WshNetwork重新映射网络驱动器。同样,这是不可能的,因为我不知道UNC路径是什么或将是什么。
可能的解决方案3:
Connect using ShellExecute
虽然这会起作用,但由于它打开了一个窗口来浏览文件夹(可以使用SW_HIDE来避免显示窗口,但我该如何关闭它?)。此外,它不会立即连接。我需要一段不确定的时间来完成这项工作。不是一个好答案。
MSDN ShellExecute Function
那么有更好的解决方案吗?如何在等待驱动器返回并在无法连接时抛出错误时连接驱动器?
我需要它同时适用于VBScript和VBA。