Страницы: 1
RSS
Excel VBA. Групповое переименование файлов, на листе Excel
 
Здравствуйте. Может кому будет интересно.
С помощью обычных текстовых функций, с дополнительными столбцами или без них, выводим новое имя файла в колонку "Новое имя файла", не забываем про расширение файла, т.е., чтобы оно не "потерялось", так-как я не делал "защиту от дурака".
! Переименовываемые файлы не должны быть открыты в других программах или в самом Екселе, иначе будет ошибка.
Изменено: DANIKOLA - 05.09.2021 22:45:32
 
DANIKOLA, здравствуйте
Вам не кажется, что более универсально делать поля "старый путь" и "новый путь", чем прописывать общую для частного случая часть отдельно?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, здравствуйте.
Цитата
Jack Famous написал:
более универсально делать поля "старый путь" и "новый путь",
Возможно я вас не до конца понял, но мне кажется названия этих полей вполне соответствуют назначению макроса, мы ведь переименовываем файлы, а не перемещаем по новому пути... Каждый в праве переделать, как ему угодно - код открыт. В макросе ListFilesInFolder меняем на своё, для тех кто плохо знает VBA.
Код
    Range("A2").Value = "Старое имя файла"
    Range("B2").Value = "Новое имя файла"
 
Цитата
DANIKOLA написал:
мы ведь переименовываем файлы, а не перемещаем по новому пути...
переименовать файл с точки зрения ЛЮБОЙ файловой системы
значит присвоить файлу НОВОЕ имя (если файлу Х присвоить имя У - файла Х уже нет, есть файл У)
скопировать файл с новым именем (не переименовать, а скопировать)  это значит создать копию файла с другим именем, оригинал остается на месте, а в каком-то другом месте появляется его двойник (копия)
а вот, ПЕРЕИМЕНОВАТЬ с точки зрения файловой системы и всех, кто понимает что это такое (и файловая система и процесс переименования файла) это синоним слова ПЕРЕМЕСТИТЬ
Изменено: Ігор Гончаренко - 06.06.2021 22:53:24
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, я знаю это в коммандной строке windows и linux одна и та же команда может выполнять эти действия с файлами.
А в vba, команда Name, тоже так умеет?
У меня просто была задача переименовать группу файлов в одной папке без каких-либо перемещений, то я и не пробовал перемещать.
 
Name предназвначена для переименования (переноса файлов)
переименовать файл, оставив в той же папке, это частный случай от переименования файла, когда он получает другой адрес и фактически перемещается в другую папку, на другой диск (и все это написано в документации)
Изменено: Ігор Гончаренко - 06.06.2021 23:53:38
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Исправлено после прочтения справки по оператору Name.
Цитата
Оператор Name переименовывает файл и при необходимости перемещает его в другой каталог или папку.

Я было подумал, что исходные файлы останутся, а нет — переместятся в другую указанную папку. В таком случае я не вижу смысла перемещать переименовываемые файлы в другую папку.
Изменено: DANIKOLA - 07.06.2021 00:22:42
 
Цитата
DANIKOLA: мы ведь переименовываем файлы, а не перемещаем по новому пути
Цитата
Ігор Гончаренко: ПЕРЕИМЕНОВАТЬ это синоним слова ПЕРЕМЕСТИТЬ
я бы сказал, что ПЕРЕИМЕНОВАНИЕ - это частный случай ПЕРЕМЕЩЕНИЯ, а именно перемещение без изменения пути до имени файла и именно поэтому гораздо универсальнее делать именно ПЕРЕМЕЩЕНИЕ, но дело ваше  :)

Для операций с файлами рекомендую библиотеку FileSystemObject и желательно с ранним связыванием
Мануал по файловым операциям
Изменено: Jack Famous - 07.06.2021 09:20:37
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Здравствуйте.
Спасибо, воспользовался вашим файлом.
Но при этом прошу помощи. При сохранении файлов с одинаковыми именами выдаёт ошибку.
Прошу что-то добавить что-бы если такое имя уже существует, то к имени он добавлял (1), (2), (3) и т.д.
Пример своего файла приложил.
Прошу не смеяться над тем как я соединил макросы и как сделал способ переименования.
 
Код
Sub Rename_File()
    Dim sFilePath As String, LastRow As Long, Cell As Range
    sFilePath = Split(Range("A1").Text, " ", 3)(2)    'путь к текущей паке
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    If Right(sFilePath, 1) <> "\" Then sFilePath = sFilePath & "\"
    
    If Application.WorksheetFunction.CountA(Range("A3:A" & LastRow)) <> Application.WorksheetFunction.CountA(Range("B3:B" & LastRow)) Then Exit Sub
    
    For Each Cell In Range("A3:A" & LastRow)
        If Dir(sFilePath & Cell.Text, 16) <> "" And ThisWorkbook.FullName <> sFilePath & Cell.Text Then
            Name sFilePath & Cell.Text As GetNewName(sFilePath, Cell.Offset(0, 1).Text) 'переименовываем файл
        End If
    Next Cell
    'Update file list
    Call ListFilesInFolder(sFilePath)
    Shell "explorer.exe " & sFilePath, vbNormalFocus
End Sub

Private Function GetNewName(sFilePath As String, sName As String) As String
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim sBase As String
    sBase = fso.GetBaseName(sName)
    Dim sExte As String
    sExte = "." & fso.GetExtensionName(sName)
    Dim sFull As String
    Dim sIndx As String
    Dim ii As Long
    
    Do
        If ii = 0 Then
            sIndx = ""
        Else
            sIndx = "(" & ii & ")"
        End If
        sFull = sFilePath & sBase & sIndx & sExte
        If Dir(sFull, 16) = "" Then Exit Do
                
        ii = ii + 1
    Loop
    GetNewName = sFull
End Function
 
Здравствуйте. Вариант

Т.е. на самый первый файл номер не ставится, потому что если файл только один, то номер как бы не нужен, у меня такой вариант получился.
Решение не универсальное, а исключительно для данного примера от Лилиенталь.
Возможно код от уважаемого МатросНаЗебре, решит задачу Лилиенталь одним махом.
Код, может кому интересно

В словаре в Key записываем все новые имена файлов и в Item через СЧЁТЕСЛИ их количество в заданном диапазоне...
 
Спасибо, всё работает.
Есть внутренние косяки. Если в имени нет обозначения "КПДМ......" то выдаёт ошибку.
Но в данном случае это проблемы личного характера и вопросы к конструктору, который прислал комплект чертежей с файлами без обозначений.
Изменено: Лилиенталь - 17.04.2024 10:00:21
Страницы: 1
Наверх