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

Posted

技术标签:

【中文标题】EXCEL VBA - 如果目录和文件夹不存在,则创建它们【英文标题】:EXCEL VBA - create directories and folders if they are not already there 【发布时间】:2017-06-26 06:49:16 【问题描述】:

我在 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

【问题讨论】:

你能把 debug.print(folderLevel) 放在 folderLevel = folderLevel & "\" 之后看看那个值是什么吗? Path 是 Excel VBA 内置方法,Path 变量声明没有报错吗? @Barney Path 是少数对象的内置属性,但不是 Excel-VBA 中的内置方法。尽管如此,作为变量名并不是一个很好的选择。 @cyboashu 不知道这一点。谢谢。 【参考方案1】:

您正在创建孤立文件夹。 mkdir "abc\" 将在 WorkBook 的目录中创建一个名为 abc 的文件夹。如果未保存工作簿,则在 MyDocuments 中创建此文件夹(最有可能,取决于 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

【讨论】:

效果很好。谢谢!

以上是关于EXCEL VBA - 如果目录和文件夹不存在,则创建它们的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel VBA 中创建文件夹和子文件夹

Excel VBA 检查目录是不是存在错误

求VBA代码(CSV文件内容导入excel)

如何用VBA判断另1个EXCEL表是不是已经打开

Excel VBA如果WorkSheet(“wsName”)存在[重复]

excel的VBA里面的WorkBooks.Open的问题