Проблема
На работе потребовалось переименовать группу файлов.
Делюсь макросом
ссылка на файл с макросом ФАЙЛ
Как это работает
- В поле FolderPath вставить полный путь к папке, в которой требуется заменить название файлов.
- обновить запрос Power Query
- В желтом столбце написать новые имена файлов
- нажать кнопку "произвести замену"
Описание:
- Работает на компьютерах от Office 2016 и старше.
- Для работы в других версиях потребуется установка Power Query и немного определить переменные, что в старших версиях xl уже не требуется.
- Макрос не проверяет уникальность ваших имен вся ответсвенность лежит на Вас лично.
Обязательное условие работы
- Динамические таблицы:
FolderPath с одной строкой в единственном поле FolderPath
FileList с полями Format (расширение файла), OldText, NewText - Все динамические таблицы на одном листе!!!
Лист должен называться List1 (системное имя листа, а не название)
Код VBA
по ссылке есть подписи к коду
Sub rename()
FileListSt1 = "Format"
FileListSt2 = "OldText"
FileListSt3 = "NewText"
FolderPathSt1 = "FolderPath"
Set Tab_1 = List1.ListObjects("FileList")
Set Tab_2 = List1.ListObjects("FolderPath")
count_rowsFileList = Tab_1.ListRows.Count
FolderPath = Tab_2.ListColumns(FolderPathSt1).DataBodyRange(1).Value & "\"
For i = 1 To count_rowsFileList Step 1
file_format = Tab_1.ListColumns(FileListSt1).DataBodyRange(i).Value
file_OldName = Tab_1.ListColumns(FileListSt2).DataBodyRange(i).Value
file_NewName = Tab_1.ListColumns(FileListSt3).DataBodyRange(i).Value
OldName = FolderPath & file_OldName & file_format
NewName = FolderPath & file_NewName & file_format
Name OldName As NewName
Next i
End Sub
Код М
FileList название запроса.
№ Заменить на решетку ## особености ядекс ДЗЕн
let
Источник = Folder.Files(Excel.CurrentWorkbook(){[Name="FolderPath"]}[Content]{0}[FolderPath]),
№"Другие удаленные столбцы" = Table.SelectColumns(Источник,{"Name", "Extension"}),
№"Переименованные столбцы" = Table.RenameColumns(№"Другие удаленные столбцы",{{"Name", "OldText"}, {"Extension", "Format"}}),
№"Переупорядоченные столбцы" = Table.ReorderColumns(№"Переименованные столбцы",{"Format", "OldText"}),
№"Извлеченный текст перед разделителем" = Table.TransformColumns(№"Переупорядоченные столбцы", {{"OldText", each Text.BeforeDelimiter(_, ".", {0, RelativePosition.FromEnd}), type text}})
in
№"Извлеченный текст перед разделителем"
Список всех моих статей в оглавлении.