Здравствуйте участники форума. Необходимо макросом переименовать 19 файлов.
Наименования файлов каждый день будут меняться, но только после второго знака _ (например этот текст: 29122025%20(2)) Надо заменить: OOMS_cz_29122025%20(2) на Центры здоровья, OOMS_dialis_29122025%20(3) на Объемы по диализу, OOMS_dispd_29122025 на Плановые задания по диспансеризации детей. Пример замены в приложенном файле. Заранее спасибо за решение.
Здравствуйте участники форума. Необходимо макросом переименовать 19 файлов.
Наименования файлов каждый день будут меняться, но только после второго знака _ (например этот текст: 29122025%20(2)) Надо заменить: OOMS_cz_29122025%20(2) на Центры здоровья, OOMS_dialis_29122025%20(3) на Объемы по диализу, OOMS_dispd_29122025 на Плановые задания по диспансеризации детей. Пример замены в приложенном файле. Заранее спасибо за решение.Mark1976
vanin00, да. Отлично. Спасибо. Но 2 файла не переименовались. OOMS_sahdiab_29122025%20(2), OOMS_dispnab_29122025%20(2). Эти файлы исходники имеют расширение .xls Видимо по этой причине они и не переименовались.
vanin00, да. Отлично. Спасибо. Но 2 файла не переименовались. OOMS_sahdiab_29122025%20(2), OOMS_dispnab_29122025%20(2). Эти файлы исходники имеют расширение .xls Видимо по этой причине они и не переименовались.Mark1976
Сообщение отредактировал Mark1976 - Понедельник, 02.03.2026, 20:33
With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Выберите папку с файлами"
If .Show = -1 Then
Dim folderPath As String folderPath = .SelectedItems(1) & "\" Else MsgBox "Папка не выбрана." Exit Sub End If
End With
On Error GoTo CleanExit Application.ScreenUpdating = False Application.DisplayAlerts = False
Dim i As Long i = 1
Do While Cells(i, 1).Value <> ""
Dim renamedCount As Long Dim skippedCount As Long
Dim oldName As String oldName = Trim(Cells(i, 1).Value)
Dim newName As String newName = Trim(Cells(i, 2).Value)
' Ищем файл с любым расширением Dim fileFound As String fileFound = Dir(folderPath & oldName & ".*")
If fileFound = "" Then skippedCount = skippedCount + 1 Else
' Получаем расширение Dim fileExt As String fileExt = Mid(fileFound, InStrRev(fileFound, "."))
Dim fullOldPath As String fullOldPath = folderPath & fileFound
Dim fullNewPath As String fullNewPath = folderPath & newName & fileExt
' Проверка — существует ли файл с новым именем If Dir(fullNewPath) <> "" Then skippedCount = skippedCount + 1 Else Name fullOldPath As fullNewPath renamedCount = renamedCount + 1 End If
If Err.Number <> 0 Then MsgBox "Ошибка: " & Err.Description, vbCritical Else MsgBox "Готово!" & vbCrLf & _ "Переименовано: " & renamedCount & vbCrLf & _ "Пропущено: " & skippedCount, _ vbInformation End If
End Sub
[/vba]
Mark1976, Пробуйте данный вариант. [vba]
Код
Option Explicit
Sub RenameFiles()
With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Выберите папку с файлами"
If .Show = -1 Then
Dim folderPath As String folderPath = .SelectedItems(1) & "\" Else MsgBox "Папка не выбрана." Exit Sub End If
End With
On Error GoTo CleanExit Application.ScreenUpdating = False Application.DisplayAlerts = False
Dim i As Long i = 1
Do While Cells(i, 1).Value <> ""
Dim renamedCount As Long Dim skippedCount As Long
Dim oldName As String oldName = Trim(Cells(i, 1).Value)
Dim newName As String newName = Trim(Cells(i, 2).Value)
' Ищем файл с любым расширением Dim fileFound As String fileFound = Dir(folderPath & oldName & ".*")
If fileFound = "" Then skippedCount = skippedCount + 1 Else
' Получаем расширение Dim fileExt As String fileExt = Mid(fileFound, InStrRev(fileFound, "."))
Dim fullOldPath As String fullOldPath = folderPath & fileFound
Dim fullNewPath As String fullNewPath = folderPath & newName & fileExt
' Проверка — существует ли файл с новым именем If Dir(fullNewPath) <> "" Then skippedCount = skippedCount + 1 Else Name fullOldPath As fullNewPath renamedCount = renamedCount + 1 End If