Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 查找分配给主驱动器的字母_Vba_Excel - Fatal编程技术网

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在评论中的链接有更好的例子,我认为最好使用完整的映射路径,而不是映射驱动器号。