vba - 从给定单元格右侧的范围中选择值,并从中迭代创建子文件夹

标签 vba excel filesystems

希望你一切都好。

我正在尝试使用 Excel 和 vba 创建一个批量文件夹创建器。这是我第一次使用 VBA,因为我通常专注于基于网络的语言,所以请原谅我事先缺乏知识。我已经有了一些代码,它只是完成了我正在努力完成的最后工作。

当前,用户在给定单元中指定目录,并在另一个单元中指定父文件的名称。单击按钮后,宏将使用父文件单元中的目录和名称创建父文件夹。然后,它使用受访者在运行宏时选择的任何单元格的值创建子文件夹。

我目前正在努力完成该项目的下一阶段,即在子文件夹中创建子文件夹(我将其称为“孙子”)。如果所有子文件夹都有相同的孙子文件夹,这将很容易,但事实并非如此。我想做的是获取每个单元格右侧的 3 个值,这些值定义了子文件夹的名称,并使用它们来创建孙子,但是我目前使用我当前使用的代码收到“无效限定符”消息(见下文)。

BasePath = Range("folder_path")

'Check if the project folder already exists and if so raise and error and exit
If Dir(BasePath, vbDirectory) <> "" Then
MsgBox BasePath & " already exists", , "Error"
Else

'Create the project folder
MkDir BasePath

MsgBox "Parent folder creation complete"

'Loop through the 1st tier subfolders and create them
For Each c In ActiveWindow.RangeSelection.Cells
    'create new folder path
    NewFolder = BasePath & "\" & c.Value
    'create folder

    If fs.folderexists(NewFolder) Then
        'do nothing
    Else
        MkDir NewFolder
    End If

Next c

'Create GrandChildren
For Each d In ActiveWindow.RangeSelection.Cells
    'Offset the selection to the right

    For Each e In d.Offset(0, 1).Resize(1, 3).Cells

    Test = e.Value
    GrandChild = BasePath & "\" & d.Value & "\" & Test

    If fs.folderexists(GrandChild) Then
        'do nothing
    Else
        MkDir GrandChild
    End If

Next e
Next d

MsgBox "Sub-folder creation complete"

End If

End Sub

如果您需要任何进一步的信息,请告诉我。

干杯,

杰森

最佳答案

我认为你的问题就在这里

测试 = d.Offset(0, 1).Select

Test 是一个字符串,您正在选择一个单元格。你应该尝试这个:

Test = d.Offset(0,1).Value

关于vba - 从给定单元格右侧的范围中选择值,并从中迭代创建子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10432930/

相关文章:

c - 为什么 inode 编号从 1 而不是 0 开始?

vba - 如果满足条件,如何将行复制到新工作表中?

sql - 将 Excel 中的数据与数据库相结合

excel - VBA - 减少 if 内的 for 循环

filesystems - LVM Thinpool - 如何调整 thinpool LV 的大小?

assembly - 为什么很少使用 FAT#2?

excel - 如何计算 Excel 中两个 ISO 8601 日期时间之间的秒数?

vba - 如何在 VBA 中创建复合对象?

arrays - 数组大小限制在 VBA 中传递数组参数

Excel 公式隐藏定义名称中的换行符