У меня есть 4 столбца данных, которые мне нужно преобразовать в список папок и подпапок. Столбец B будет первым списком основных папок, а каждая запись столбца C будет подпапкой и глубже в подпапку столбца D в соответствующей папке из столбца B.
Столбец A содержит имена файлов .pdf, хранящихся в исходных адресатах, которые необходимо перенести в последнюю подпапку целевого адресата.
Присутствует Источник и целевой каталог:
Source: C:\Users\Manzurfa\Desktop\Macro Project\Carlo Project\Order Confirmations
Target: C:\Users\Manzurfa\Desktop\Macros
Хотя приведенный ниже код работает исключительно хорошо, мне понадобится макрос, чтобы предложить пользователю указать исходную папку и целевую папку вместо принудительного принудительного использования каталогов.
Option Explicit
Sub Tester()
'Const SRC_FOLDER = "C:\Users\Manzurfa\Desktop\Macro Project\Carlo Project\Order Confirmations\"
'Const DEST_FOLDER = "C:\Users\Manzurfa\Desktop\Macros\"
Dim Rng As Range, fPath, fName
Dim SRC_FOLDER As String, DEST_FOLDER As String
Dim maxRows As Long, maxCols As Long, r As Long, c As Long
Set Rng = Selection
maxRows = Rng.Rows.Count
maxCols = Rng.Columns.Count
With Application.FileDialog(msoFileDialogOpen)
.Show
If .SelectedItems.Count = 1 Then
SRC_FOLDER = .SelectedItems(1)
End If
End With
If SRC_FOLDER <> "" Then
Open SRC_FOLDER For Output As #n
End If
'assuming the first row in ther selection is the headers...
' otherwise, start at 1
For r = 2 To maxRows
fPath = DEST_FOLDER '<<set starting point
For c = 2 To maxCols
fPath = fPath & "\" & Rng.Cells(r, c) '<<build next level
If Len(Dir(fPath, vbDirectory)) = 0 Then MkDir fPath
On Error Resume Next
Next c
'create file name
fName = Right("0000000000" & Rng.Cells(r, 1).Value, 10) & ".pdf"
'copy to fpath
FileCopy SRC_FOLDER & fName, fPath & "\" & fName
Next r
With Application.FileDialog(msoFileDialogOpen)
.Show
If .SelectedItems.Count = 1 Then
DEST_FOLDER = .SelectedItems(1)
End If
End With
If DEST_FOLDER <> "" Then
Open DEST_FOLDER For Output As #n
End If
End Sub
Любая помощь в этом будет должным образом оценена.