EXCEL VBA - 如果目录和文件夹不存在,则创建它们

3

我在A列中有一些文件夹路径,定义了我试图创建的目录层次结构(例如,“C:\topFolder\nextFolder\lastFolder\”)。代码没有报错,但是没有创建任何文件夹。我在这里做错了什么?

Sub newDestination()
    Dim Path As Variant
    Dim folderLevel As Variant

    For Each Path In Sheet11.Range("A:A")
        For Each folderLevel In Split(Path.Value, "\")
            folderLevel = folderLevel & "\"
            If Len(Dir(folderLevel, vbDirectory)) = 0 Then
                MkDir folderLevel
            End If
        Next folderLevel
    Next Path

End Sub

你可以在 folderLevel = folderLevel & "" 后面加上 debug.print(folderLevel) 来查看该值是多少吗? - pokemon_Man
“Path” 是 Excel VBA 内置方法,你在声明 Path 变量时没有收到任何错误吗? - Barney
@Barney Path 是一些对象的内置属性,但不是 Excel-VBA 中的内置方法。然而,作为变量名并不是一个很好的选择。 - cyboashu
@cyboashu 不知道这个。谢谢。 - minnow1
1个回答

5
你正在创建孤立的文件夹。使用mkdir "abc\"将在工作簿目录中创建名为abc的文件夹。如果工作簿没有保存,则该文件夹将会被创建在我的文档中(根据Excel的配置,可能是这样)。
你需要传递完全限定路径来创建一个位于你想要的位置的文件夹,如:"C:\Temp\abc\"。
在你的代码中,问题出现在你运行for循环并传递文件夹名称的方式上。
以下是正确的方法:
Sub test()

    Dim strPath  As String
    Dim lCtr     As Long

    strPath = "C:\Temp\Parent\Child\ChildsChild"

    arrpath = Split(strPath, "\")
    strPath = arrpath(LBound(arrpath)) & "\"

    For lCtr = LBound(arrpath) + 1 To UBound(arrpath)
        strPath = strPath & arrpath(lCtr) & "\"            
        If Dir(strPath, vbDirectory) = "" Then
            MkDir strPath
        End If
    Next

End Sub

非常好用。谢谢! - minnow1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接