Vba 查找分配给主驱动器的字母
我试图找到一个类似于Vba 查找分配给主驱动器的字母,vba,excel,Vba,Excel,我试图找到一个类似于Environ的函数,以查找我公司的主驱动器在特定PC上映射到的驱动器 使用文件路径“G:\Eworking\SET\Operations\file”,我知道我的电脑已映射,因此该文件路径位于G驱动器内,但其他文件路径的映射方式可能不同,因此我想确定它是哪一个 我曾经尝试过使用if-else方法来遍历字母表,然后执行if-Dir([filepath]),然后执行(见下文),但我想知道是否有更好的方法来执行此操作 Sub LoopThroughDrives() sFilePat
Environ
的函数,以查找我公司的主驱动器在特定PC上映射到的驱动器
使用文件路径“G:\Eworking\SET\Operations\file”,我知道我的电脑已映射,因此该文件路径位于G驱动器内,但其他文件路径的映射方式可能不同,因此我想确定它是哪一个
我曾经尝试过使用if-else方法来遍历字母表,然后执行if-Dir([filepath]),然后执行(见下文),但我想知道是否有更好的方法来执行此操作
Sub LoopThroughDrives()
sFilePath As String
sFilePath = ":\Eworking\SET\Operations\file"
If Dir("A" & sFilePath) > 0 Then
msgbox ("It's in drive A")
Else
If Dir("B" & sFilePath) > 0 Then
msgbox ("It's in drive B")
Else
If Dir("C" & sFilePath) > 0 Then
msgbox ("It's in drive C")
Else
'...........................
'All other letters of the alphabet, checking each possibility
'...........................
End If
End If
End If
End Sub
A为。。。下一个使用ASCII字符的循环似乎是合适的
dim c as integer
for c = 65 to 90
If CBool(Len(Dir(Chr(c) & sFilePath))) Then
msgbox "It's in drive " & Chr(c) '<~~msgbox, not magbox
exit for
end if
next c
if c > 90 then msgbox "never found"
dim c作为整数
对于c=65到90
如果是CBool(Len(Dir(Chr(c)&sFilePath)),那么
msgbox“它在驱动器中”&Chr(c)'90然后msgbox“从未找到”
您可以获得如下驱动器号和路径:
For Each d In CreateObject("Scripting.FileSystemObject").Drives
Debug.Print d.DriveLetter, d.Path, d.ShareName
Next
有关如何使用FileSystemObject枚举驱动器的信息,请参见或。使用UNC路径是否有问题?如果您的代码正常工作,我建议您将其提交审查(全部!)-“代码正常,但我的眼睛想跳出来”听起来非常像一篇非常好的CR帖子@Jeremy如果驱动器映射到网络路径,那么在我的示例中,d.ShareName
可能会工作这样的东西比我拥有的要好得多,但它在驱动器上时会跳过(即不是真的),它应该在(驱动器G)上接受,然后转到“从未找到”消息框-知道为什么吗?@Jeremy-如果文件是文件夹而不是文件,则应在中使用vbDirectory参数。e、 g.如果是CBool(Len(Dir(Chr(c)&sFilePath,vbDirectory)),那么
就是文件路径最后缺少了一个“\”,所以没有将其识别为文件夹(新手错误!)-非常感谢这个++提供了一种更好的驱动器迭代方法(相对于迭代字母表)。。。尽管循环体可能应该尝试使用OP的sFilePath
。我在阅读问题和注释之前回答了这个问题。Tim在评论中的链接有更好的例子,我认为最好使用完整的映射路径,而不是映射驱动器号。