Указание новой папки для пути .txt в Excel

#excel #vba

Вопрос:

Я пытаюсь использовать VBA для создания папок с именем [Значение ячейки 1], затем внутри этих папок создайте текстовые файлы с именем [Значение ячейки 1] и[Значение ячейки 2] с содержимым [Значение ячейки 3].

Я написал рабочий код, чтобы сделать файлы .txt именованными и с содержимым, но я не могу понять, как создать папки для хранения файлов .txt.

Пример таблицы

фамилия имя День рождения
Кузнец Джон 1/2/1980
Пирсон Сэм 5/4/1974
Кузнец Джейн 12/5/1962

Мои текущие выходные данные-это текст Джона Смита с содержанием 1/2/1980 Сэм Pearson.txt с содержанием 5/4/1974 Джейн Smith.txt с содержанием 12/5/1962

Я хочу, чтобы они были разделены на папки по фамилии, поэтому вывод должен быть Папка:Smith с содержимым Джон Смит txt и Джейн Смит txt Папка:Пирсон с содержимым Сэм Пирсон txt

До сих пор это мой код

 Sub create_Txt()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim oFile As Object

Dim iamp;, lastRowamp;
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To lastRow
    Set oFile = fso.CreateTextFile("C:UsersmasonDesktop" amp; Cells(i, 3) amp; " " amp; Cells(i, 2) 
    amp; ".txt")
    oFile.WriteLine Cells(i, 4).Value
    oFile.Close 
Next i
Set fso = Nothing
Set oFile = Nothing
End Sub
 

Спасибо!

Ответ №1:

Попробуйте этот код:

 Option Explicit

Sub create_Txt()
    Const BASE_PATH = "c:temptest" ' "C:UsersmasonDesktop"
    ' It is more convenient to work with objects using early binding. Subsequently can be changed to late binding if needed
    ' set reference to 'Microsoft Scripting Runtime'
    Dim fso As FileSystemObject, oFolder As Scripting.Folder, oFile As Scripting.TextStream
    Set fso = New FileSystemObject  ' CreateObject("Scripting.FileSystemObject")
    
    Dim i As Long, lastRow As Long, path As String
    
    With ThisWorkbook.Sheets(1)   'replace with your own 
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        
        For i = 2 To lastRow    'start from 2 - skip header
            path = BASE_PATH amp; .Cells(i, 1)                             'append path with lastname
            If Not fso.FolderExists(path) Then fso.CreateFolder path    'make folder
            Set oFile = fso.CreateTextFile(path amp; "" amp; .Cells(i, 2) amp; " " amp; .Cells(i, 1) amp; ".txt")
            oFile.WriteLine .Cells(i, 3).Value
            oFile.Close
        Next i
    End With
End Sub
 

Данные
введите описание изображения здесь

Результат
введите описание изображения здесь