代码之家  ›  专栏  ›  技术社区  ›  D_Bester

我的电脑中的“断开网络驱动器”

  •  1
  • D_Bester  · 技术社区  · 11 年前

    我们使用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。

    1 回复  |  直到 11 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    Slugster建议获取映射的UNC值是一个很好的建议。以下是我的解决方案,改编自 this answer 这适用于VBScript和VBA。

    Sub testget()
        Debug.Print getUNC("F:\T\")
    End Sub
    
    Function getUNC(dir)
    
        Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
        Dim sDrive: sDrive = fso.GetDriveName(dir)
        Set fso = Nothing
    
        Dim sMap: sMap = GetMappedDrive(sDrive)
        If sMap <> "" And sDrive <> sMap Then
            getUNC = Replace(dir, sDrive, sMap)
        Else
            getUNC = dir
        End If
    
    End Function
    
    Function GetMappedDrive(sDrive)
        Dim wshNetwork: Set wshNetwork = CreateObject("WScript.Network")
        Dim oDrives: Set oDrives = wshNetwork.EnumNetworkDrives
        Dim i
        For i = 0 To oDrives.Count - 1 Step 2
            If UCase(oDrives.Item(i)) = UCase(sDrive) Then
                GetMappedDrive = oDrives.Item(i + 1)
                Exit For
            End If
        Next
        Set oDrives = Nothing
        Set wshNetwork = Nothing
    End Function
    
    推荐文章