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