如何从Application.Path获取UNC路径?

时间:2017-12-20 14:46:12

标签: vba

我想在vba代码中获取活动工作簿的路径。 ActiveWorkbook.Path执行此操作

BUT

我需要它来检索这样的东西:

\\MachineName\ShareFolder\ETC\ETC2

NOT:

S:\ETC\ETC2

S:映射到\\MachineName\ShareFolder\的位置。我该怎么做?

3 个答案:

答案 0 :(得分:1)

    Dim Drive As String
    Drive = Left(ActiveWorkbook.Path, 2)

    ActiveWorkbookPath = Replace(ActiveWorkbook.Path, Drive, GetNetworkPath(Drive))


Function GetNetworkPath(ByVal DriveName As String) As String

    Dim objNtWork  As Object
    Dim objDrives  As Object
    Dim lngLoop    As Long


    Set objNtWork = CreateObject("WScript.Network")
    Set objDrives = objNtWork.enumnetworkdrives

    For lngLoop = 0 To objDrives.Count - 1 Step 2
        If UCase(objDrives.Item(lngLoop)) = UCase(DriveName) Then
            GetNetworkPath = objDrives.Item(lngLoop + 1)
            Exit For
        End If
    Next

End Function

答案 1 :(得分:1)

在尝试转换文件路径或任何类似垃圾之前,请尝试Workbook对象提供的其他几个属性。我个人对我的所有项目(托管在网络驱动器上)使用ActiveWorkbook.FullName,我从未遇到过问题。

也就是说,如果这种方法不起作用,那么肯定有转换文件路径的方法。虽然我更喜欢首先浏览对象的属性(它们往往更可靠),但我不能使用函数来解决问题。在查看此文章的位置https://pagecommunication.co.uk/2014/07/15/vba-to-convert-a-mapped-drive-letter-to-unc-path/并查看此答案Convert Shared folder path to UNC path可能会有所帮助。两者之间唯一的区别是前者需要引用Microsoft.Scripting.Runtime,另一个则不需要。

答案 2 :(得分:-1)

以下代码将以您请求的方式标识文件路径。

Path = Right(CurDir(), Len(CurDir()) - InStr(CurDir(), "\") + 1)