在用户选择的路径中创建一个文件夹并像我想要的那样命名该文件夹

Posted

技术标签:

【中文标题】在用户选择的路径中创建一个文件夹并像我想要的那样命名该文件夹【英文标题】:Create a folder in the path the user chose and name the folder like i want 【发布时间】:2020-01-21 19:18:13 【问题描述】:

我没有使用 VBA 的经验,但我试图让用户选择一个文件夹的路径,如果该文件夹不存在则需要创建,然后提取将放入文本文件中的三列 Excel在创建的文件夹中。

在你们的帮助下,我的代码现在可以运行了!!

我应该做什么样的改变?如果你知道一种方法来简化我的代码,那就太好了!

Sub register_formated_data()
'
' register_formated_data Macro
'
Dim order As Object
Dim Folder As Object
Dim Folder_path As String
Dim lastrow As Long

FolderName = "Formated Files"
Filename = "formated" & Right(File_path, InStr(File_path, "\"))

Dim FL As String ' FL is for file location

Sheets(8).Cells(12, 12).Value = ""

With Application.FileDialog(msoFileDialogFolderPicker)   '
    .Title = "Select the folder"                       'Open the file explorer
    .InitialFileName = ThisWorkbook.path & "\"         'for you to select
    .InitialView = msoFileDialogViewDetails            'the file you want
    .AllowMultiSelect = True                           'to format
    .Show                                              '

    On Error GoTo PROC_EXIT
    If Not .SelectedItems(1) = vbNullString Then FL = .SelectedItems(1)

End With

Sheets(8).Cells(12, 12).Value = FL

Folder_path = FL + "\" + FolderName

Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(Folder_path & FolderName) Then
fso.CreateFolder(Folder_path).Name = FolderName

End If

PROC_EXIT: 结束子

【问题讨论】:

您可能需要查看MkDir 以创建目录或文件夹。 @alexilas 用户如何选择不存在的文件夹的路径?用户可以选择父文件夹并检查其中的文件夹。例如,用户选择 c:\temp\,如果文件夹 c:\tenp\Formated Files\ 不存在,则创建它。你是这个意思吗? @CDP1802 是的,这就是我想说的。从我在“mkdir”上看到的内容来看,这似乎是我应该考虑的事情! ...我不确定我应该如何实现 mkdir,但我会搜索一下 @Cyril 我找到了一种让我的代码工作的方法,但我对mkdir methode 很感兴趣!!有关于***的例子吗?? @alexilas 如果您在帖子中使用 FileSystemObject,您可以在同一对象上使用 CreateTextFile 方法来创建转储文件。 【参考方案1】:

fso.Name 不是 FSO 的方法或属性。您只需要CreateFolder,但请确保路径以所需的文件夹名称结尾。所以它应该是:

fso.CreateFolder FFolder_Path

还在这里指出您说的是Folder_path 而不是ffolder_path。我会将您的文件夹路径命名为更有意义的名称,以避免将来出现此错误。特别是考虑到它以 2 个重复字符开头。


刚刚再次查看您的代码,不知道为什么您有一个从 1 到 1 的 For 循环,除非您希望它在那里以便将来可能循环(尽管如果它循环,它只会不断覆盖 @ 987654329@ 直到集合中的最后一项):

For lngCount = 1 To 1
            'MsgBox .SelectedItems(lngCount)
            On Error GoTo PROC_EXIT
            If .SelectedItems(lngCount) <> "" Then          'if the file exist, folder_location take the value of the selected file
                FL = .SelectedItems(lngCount)
            Else
                End
            End If
            'MsgBox "Text :" & previous_version_folder
        Next lngCount

我只想说

On Error GoTo PROC_EXIT
If Not .SelectedItems(1) = vbNullString Then FL = .SelectedItems(1)

【讨论】:

添加Option Expicithint!是什么阻止了so.CreateFolder Folder_pathandfolder.Name上的错误可以像fso.CreateFolder(FFolder_path).Name = FolderName一样使用 @jclasley 我认为你的意思是 Option Explicit @ComputerVersteher 我不确定为什么要添加Option explicit。因为我是一个完全的“菜鸟”,有隐式 var 应该可以帮助我......对吗?? @alexilas。啊,欢迎来到SO!请收下tour 并阅读How to Ask!向搜索引擎询问“vba option explicit”的结果是什么?如果您不理解部分结果,您可以提问,但始终表现出自己的努力(并且将问题放入搜索引擎是最低限度的!)。 @ComputerVersteher 我搜索了option explicit,但我想我的最后一条评论在option explicit 的微软页面上不够明确(没有双关语意图),他们说如果打开,我必须声明我使用的每个 var!据我了解,如果我尝试实现一些即兴的 var,它会向我发送一个错误,除非必须声明使用的每个 var 是一件好事?哦,顺便说一句,谢谢你的旅游链接!!我虽然没有具体的提问方式!我会读的!

以上是关于在用户选择的路径中创建一个文件夹并像我想要的那样命名该文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby 中创建文件

我想要两个在一个按钮中创建两个功能

有没有办法在javascript中创建hashmap并像添加和删除值一样操作它

在 spark 中创建带有模式的配置单元外部表

在 DOS 6.22 中创建提示用户输入文件路径的批处理文件

如何在 C++ 视觉中创建 UI [关闭]