Vba 如何从Application.path获取UNC路径?

Vba 如何从Application.path获取UNC路径?,vba,Vba,我想用vba代码获取活动工作簿的路径。 ActiveWorkbook.Path执行此操作 但是 我需要它来检索如下内容: \\MachineName\ShareFolder\ETC\ETC2 不是: 其中S:映射到\\MachineName\ShareFolder\。我该怎么做?下面的代码将以您请求的方式标识文件路径 Path = Right(CurDir(), Len(CurDir()) - InStr(CurDir(), "\") + 1) 在尝试转换文件路径或任何类似的垃圾文件之前,请

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

但是

我需要它来检索如下内容:

\\MachineName\ShareFolder\ETC\ETC2
不是:


其中
S:
映射到
\\MachineName\ShareFolder\
。我该怎么做?

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

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

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


也就是说,如果这种方法不起作用,那么肯定有转换文件路径的方法。虽然我更喜欢先研究对象的属性(它们往往更可靠),但我并不反对使用函数来解决问题。这就是阅读本文的地方:检查这个答案可能会有所帮助。两者之间唯一的区别是前者需要引用Microsoft.Scripting.Runtime,而另一个则不需要。

请向我们展示您当前的代码您是否尝试过
ActiveWorkbook.FullName
?为什么否决?这个问题可能很短,但非常有效。@Md.SumanKabir OP正在使用
Application.Path
并获取一个映射的网络驱动器,但需要一个UNC路径,哪个部分不清楚?您可能错过了
S:
实际上意味着
\\MachineName\ShareFolder\
的部分,因此,你的代码不能解决这个问题。当然,它将删除
S:
。但是这可以通过
Path=Replace(Path,“S:,vbNullString)
来完成。只有知道驱动器的字母时,Replace才起作用,现在检查一下,别忘了代码格式。不过,您所做的只是删除驱动器号,而不是转换驱动器号。当然,您可以将适当的映射附加到路径并获得所需的内容,但对于如此简单的东西来说,这是一种非常迂回的方法。此外,这比一块精美瓷器更容易破碎。只要
..\SharedFolder\
更改为
。\SharedFolder\
或..\Foo\`或
。\Bar\
您的方法就会中断。不要依赖硬编码替换,也不要仅仅因为你还没有找到正确的方法就砍掉驱动器映射。FWIW,有一些代码,在谷歌上很容易找到,可以找到驱动器号的映射。但这仍然不可能是最好的方法。我不知道在旧版本中如何,但在Office 2010
此工作簿中如何。FullName
使用映射驱动器,而不是UNC。我检查了可用的变量,但没有成功地找到任何可用的变量。因此,这个问题确实有效。
Path = Right(CurDir(), Len(CurDir()) - InStr(CurDir(), "\") + 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