是否存在一种方法,最好是在 VBA 中或从 VBA(直接或通过 Win32、PowerShell、VBS、WMI 或 CMD 调用)以编程方式返回/获取包含完全限定本地文件名的第一个 Windows 共享名?
编辑:澄清一下,(a)几乎所有情况下的相关共享名称都是共享文件夹的名称,而不是共享驱动器的名称; (b) 相关共享名将是在文件的递归父目录中第一个遇到的,而不是驱动器的子目录(因此执行后者的 Scripting.Drive.ShareName 不适合)。
目标是为网络用户(出于当前目的,在同一本地子网上且没有 Active Directory)提供一个允许他们访问相关文件的字符串,例如,类似于
\ServerName\ShareName \路径\文件名.ext
以编程方式获取文件的计算机名称和本地 URI 很容易,但共享名称元素却难以捉摸。 困难在于,以编程方式获取的本地 URI 仅引用本地文件系统,以驱动器盘符开头,例如、
.DriveLetter:\path o\FileName.ext,这当然毫无意义给网络用户。
请注意,共享可以是包含目录或任何更高级别的超级目录。
任何关于是否以及如何做到这一点的想法,包括有关方法的一般想法,我们将不胜感激。
请尝试下一个功能:
Function MappedWBFullPath(wb As Workbook) As String
If Len(wb.Path) > 2 _
Then MappedWBFullPath = """" & wb.Name & """ is not on a mapped drive...": Exit Function
With CreateObject("Scripting.FileSystemObject")
MappedWBFullPath = .GetDrive(wb.Path).ShareName
End With
End Function
您可以测试它从此类映射驱动器打开工作簿并激活它。然后运行下一个测试
Sub
:
Sub testMappedWBFullPath()
Debug.Print MappedWBFullPath(ActiveWorkbook)
Debug.Print MappedWBFullPath(ThisWorkbook)
Debug.Print "Worbook network full name: " & MappedWBFullPath(ActiveWorkbook) & "\" & ActiveWorkbook.Name
End Sub
请在测试后发送一些反馈。