【问题标题】:Creating folders, subfolder, another subfolder and saving custom file name based on cell value vba根据单元格值 vba 创建文件夹、子文件夹、另一个子文件夹并保存自定义文件名
【发布时间】:2020-04-16 09:59:21
【问题描述】:

我正在尝试检查路径中的文件夹 1、2 和 3 是否存在。

例如:C:\Users\%USERNAME%\Documents\Folder 1\Folder 2\Folder 3\

如果它们不存在,它应该创建每个文件夹,然后将工作簿保存在文件夹 3 中。 所有文件夹名称和文件名都取决于单元格值。

不知道我做错了什么。

     Sub Macro1()
Dim folderPath As String
Dim individualFolders() As String
Dim tempFolderPath As String
Dim arrayElement As Variant

folderPath = "C:\Users\%USERNAME%\Documents" & "\" & Worksheets("Sheet1").Range("A10").Value & "\" & Worksheets("Sheet1").Range("B10").Value & "\" & Worksheets("Sheet1").Range("C10").Value

individualFolders = Split(folderPath, "\")

For Each arrayElement In individualFolders

    tempFolderPath = tempFolderPath & arrayElement & "\"

    If Dir(tempFolderPath, vbDirectory) = "" Then

        MkDir tempFolderPath

     End If

Next arrayElement

strFilename = Worksheets("Sheet1").Range("C1").Value 'New file name
strDefpath = Environ("USERPROFILE") & "\Documents\" & Worksheets("Sheet1").Range("A10").Value & "\" & Worksheets("Sheet1").Range("B10").Value & "\" & Worksheets("Sheet1").Range("C10").Value
If IsEmpty(strDirname) Then Exit Sub
If IsEmpty(strFilename) Then Exit Sub

MkDir strDefpath & "\" & strDirname
strPathname = strDefpath & "\" & strDirname & "\" & strFilename 'create total string

    Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=strPathname & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

End Sub

【问题讨论】:

  • 请检查所有变量是否定义正确。例如 strFilename 似乎没有被定义。只是粗略的看一下。
  • 我看到的第一个明显错误是:"C:\Users\%USERNAME%\Documents" - 应该是 "C:\Users\" & Environ$("Username") & "\Documents" - 但如果你犯了这个错误,你的代码中可能会有更多错误。
  • 使用MakeSureDirectoryPathExists!这也可以让您控制是否已创建路径,因为您没有检查有效的目录名称-。

标签: excel vba directory save


【解决方案1】:

您正在混合cmd 中通常使用的语法,即命令提示符与vba

请注意,%USERNAME% 是一个环境变量,可在命令提示符中使用,但在 Excel 中不可用。

但是,可以从 VBA 调用命令提示符,如下所示。

folderpath = Chr(34) & "C:\Users\%USERNAME%\Documents\" & Worksheets("Sheet1").Range("A10").Value & "\" & Worksheets("Sheet1").Range("B10").Value & "\" & Worksheets("Sheet1").Range("C10").Value & Chr(34)
Shell "cmd /k mkdir " & folderpath, vbHide

这应该可以一次性创建所有不存在的文件夹(从单元格A10到C10)!

【讨论】:

  • 此解决方案并不能真正告诉您目录是否已创建或存在。
  • @Storax 同意。但是,如果文件夹存在,则代码不会影响文件夹的现有内容。在这种特殊情况下,OP 的目的是创建文件夹和子文件夹,如果它们不存在并且上面的解决方案会这样做。
  • 不完全是,因为如果名称无效,您将无法获得未创建目录的信息。
猜你喜欢
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多