Beg_R = "B1" ' Начальная клетка с чужими именами
List_N = "Лист1"
Set FSO = CreateObject("Scripting.FileSystemObject")
i = 0
F_From = Sheets(List_N).Range(Beg_R).Value
On Error Resume Next
While Len(Trim(F_From)) <> 0
F_To = Sheets(List_N).Range(Beg_R).Offset(i, 1).Value
' MsgBox F_From
' MsgBox F_To
FSO.MoveFile F_From, F_To
i = i + 1
F_From = Sheets("Лист1").Range(Beg_R).Offset(i, 0).Value
Wend
' В столбце, начиная с некоторой клетки, записаны полные имена файлов (путь+имя)
' В соседних клетках справа - полные изменённые имена файлов (путь+имя), путь должен быть созданным ранее.
' Путь в изменённом имени не обязательно = исходному пути, но путь реально должен существовать.
Beg_R = "B1" ' Начальная клетка с исходными полными именами файлов
List_N = "Лист1" ' Имя листа с именами файлов
Set FSO = CreateObject("Scripting.FileSystemObject")
i = 0
F_From = Sheets(List_N).Range(Beg_R).Value ' Читаем содержимое самой первой клетки с исходными именами
On Error Resume Next ' Обработка возможных ошибок при переносе файлов
While Len(Trim(F_From)) <> 0 ' Организуем цикл до тех пор пока в клетках для исходных имён не пусто.
F_To = Sheets(List_N).Range(Beg_R).Offset(i, 1).Value ' Читаем в правой от исходной изменённое имя файла
' MsgBox F_From
' MsgBox F_To
FSO.MoveFile F_From, F_To ' Перемещаем файл с исходным путём в изменённый
i = i + 1 ' Наращиваем номер строки
F_From = Sheets("Лист1").Range(Beg_R).Offset(i, 0).Value ' Читаем следующее исходное имя файла
Wend
Sub MoveFile()
' В столбце, начиная с некоторой клетки, записаны полные имена файлов (путь+имя)
' В соседних клетках справа - полные изменённые имена файлов (путь+имя)
' Путь в изменённом имени не обязательно = исходному пути.
Beg_R = "B5" ' Начальная клетка с исходными полными именами файлов
List_N = "Лист2" ' Имя листа с именами файлов
Perezap = True ' Разрешение на перезапись выходного файла
Set FSO = CreateObject("Scripting.FileSystemObject")
i = 0
F_From = Sheets(List_N).Range(Beg_R).Value ' Читаем содержимое самой первой клетки с исходными именами
While Len(Trim(F_From)) <> 0 ' Организуем цикл до тех пор пока в клетках для исходных имён не пусто.
F_To = Sheets(List_N).Range(Beg_R).Offset(i, 1).Value ' Читаем в правой от исходной изменённое имя файла
' MsgBox F_From
' MsgBox F_To
Sheets(List_N).Range(Beg_R).Offset(i, 2) = MakeFolders(F_From, F_To, Perezap, FSO) ' Перемещаем файл с исходным путём в изменённый
i = i + 1 ' Наращиваем номер строки
F_From = Sheets(List_N).Range(Beg_R).Offset(i, 0).Value ' Читаем следующее исходное имя файла
Wend
End Sub
Function MakeFolders(InPath, OutPath, iReplace, FSO)
' InPath - полное имя исходного файла (Диск:\Путь\файл)
' OutPath - полное имя перенесённого файла
' iReplace - =True если надо перезаписать файл OutPath при его наличии, иначе = False
' FSO - объект FileSystemObject
' Функция возвращает значение "Не удалось", если файл не удалось переместить, иначе "Ok"
MakeFolders = "Не удалось"
iii = Trim(OutPath)
If iReplace Then
If FSO.FileExists(iii) Then ' Если файл уже есть и iReplace=true, его удаляем
FSO.DeleteFile iii, True
End If
End If
Mass = Split(iii, "") ' Разбиваем в массив полный путь для выходного файла на состовляющие
Niii = UBound(Mass)
TekDir = Mass(0)
On Error Resume Next ' Обработка возможных ошибок при переносе файлов
If Niii >= 2 Then
For jjj = 1 To Niii - 1 ' Если надо, создадим выходную директорию
TekDir = TekDir + "" + Mass(jjj)
' MsgBox TekDir
If Not FSO.FolderExists(TekDir) Then
FSO.CreateFolder TekDir
End If
Next
End If
FSO.MoveFile InPath, OutPath
If Err.Number = 0 Then MakeFolders = "Ok"
On Error GoTo 0
End Function
Sub MoveFile()
' В столбце, начиная с некоторой клетки, записаны полные имена файлов (Диск:\Путь\файл)
' В соседних клетках справа - полные изменённые имена файлов
' Путь в изменённом имени не обязательно = исходному пути.
' Переносим исходные файлы в файлы с изменённым именем
' В соседней клетке, содержащей изменённое имя, после перемещения, записываем результат операции ("Ok" или "Не удалось")
' При повторном запуске макроса клетки, для которых в столбце результата выполнения не пусто, не обрабатываются
Beg_R = "B5" ' Начальная клетка с исходными полными именами файлов
List_N = "Лист2" ' Имя листа с именами файлов
Perezap = True ' Разрешение на перезапись выходного файла
Set FSO = CreateObject("Scripting.FileSystemObject")
i = 0
F_From = Sheets(List_N).Range(Beg_R).Value ' Читаем содержимое самой первой клетки с исходными именами
While Len(Trim(F_From)) <> 0 ' Организуем цикл до тех пор пока в клетках для исходных имён не пусто.
F_To = Sheets(List_N).Range(Beg_R).Offset(i, 1).Value ' Читаем в правой от исходной изменённое имя файла
' MsgBox F_From
' MsgBox F_To
If Trim(Sheets(List_N).Range(Beg_R).Offset(i, 2)) = "" Then Sheets(List_N).Range(Beg_R).Offset(i, 2) = MakeFolders(F_From, F_To, Perezap, FSO) ' Перемещаем файл с исходным путём в изменённый
i = i + 1 ' Наращиваем номер строки
F_From = Sheets(List_N).Range(Beg_R).Offset(i, 0).Value ' Читаем следующее исходное имя файла
Wend
End Sub
Function MakeFolders(InPath, OutPath, iReplace, FSO)
' InPath - полное имя исходного файла (Диск:\Путь\файл)
' OutPath - полное имя перенесённого файла
' iReplace - =True если надо перезаписать файл OutPath при его наличии, иначе = False
' FSO - объект FileSystemObject
' Функция возвращает значение "Не удалось", если файл не удалось переместить, иначе "Ok"
MakeFolders = "Не удалось"
iii = Trim(OutPath)
If iReplace Then
If FSO.FileExists(iii) Then ' Если файл уже есть и iReplace=true, его удаляем
If Trim(FSO.FileExists(InPath)) Then FSO.DeleteFile iii, True
End If
End If
Mass = Split(iii, "") ' Разбиваем в массив полный путь для выходного файла на состовляющие
Niii = UBound(Mass)
TekDir = Mass(0)
On Error Resume Next ' Обработка возможных ошибок при переносе файлов
If Niii >= 2 Then
For jjj = 1 To Niii - 1 ' Если надо, создадим выходную директорию
TekDir = TekDir + "" + Mass(jjj)
' MsgBox TekDir
If Not FSO.FolderExists(TekDir) Then
FSO.CreateFolder TekDir
End If
Next
End If
FSO.MoveFile InPath, OutPath
If Err.Number = 0 Then MakeFolders = "Ok"
On Error GoTo 0
End Function
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.