Создайте папку по пути, выбранному пользователем, и назовите папку так, как я хочу - PullRequest
0 голосов
/ 21 января 2020

У меня нет опыта работы с VBA, но я пытаюсь заставить пользователя выбрать путь для папки, которую необходимо создать, если она не существует, а затем извлечь три столбца Excel, которые будут go внутри текстовый файл внутри созданной папки.

с помощью вас, ребята, мой код работает сейчас !!

какие изменения я должен заставить его работать? и если вы знаете способ упростить мой код, это было бы здорово!

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: End Sub

1 Ответ

0 голосов
/ 22 января 2020

fso.Name не является методом или свойством FSO. Все, что вам нужно, это CreateFolder, но убедитесь, что путь заканчивается желаемым именем папки. Таким образом, оно должно выглядеть следующим образом:

fso.CreateFolder FFolder_Path

Также указав здесь, что вы говорите Folder_path не ffolder_path. Я бы назвал путь к вашей папке что-то более значимое, чтобы избежать этой ошибки в будущем. Особенно если учесть, что он начинается с 2 повторяющихся символов.


Просто снова посмотрел на ваш код, не уверен, почему у вас есть For l oop, который имеет значение от 1 до 1, если вы этого не хотите для возможного зацикливания в будущем (хотя, если оно зациклится, оно будет просто непрерывно перезаписывать FL до последнего элемента в коллекции):

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...