Здравствуйте! Недавно столкнулся с проблемой массового изменения файлов, но не по шаблону, как это умеют многие программы, а таким образом, какими я их назову. Т.е. есть файл - qwerty.jpg, а мне его нужно заменить на asdfg.jpg, названия следующим файлам также задаю сам, причем хотелось бы делать это через EXСEL, так как удобнее и быстрее корректировать в таблице. На данный, момент есть список названия файлов, который я загнал в EXСEL и на основе его хочу отредактировать их названия и потом при помощи макроса разом их все переименовать.
Также после переименования всех файлов требуется массовое, но выборочное копирование нужных мне файлов в другую папку.
Возможно ли вообще силами VBA, написать такой макрос или макросы? Спасибо!
Здравствуйте! Недавно столкнулся с проблемой массового изменения файлов, но не по шаблону, как это умеют многие программы, а таким образом, какими я их назову. Т.е. есть файл - qwerty.jpg, а мне его нужно заменить на asdfg.jpg, названия следующим файлам также задаю сам, причем хотелось бы делать это через EXСEL, так как удобнее и быстрее корректировать в таблице. На данный, момент есть список названия файлов, который я загнал в EXСEL и на основе его хочу отредактировать их названия и потом при помощи макроса разом их все переименовать.
Также после переименования всех файлов требуется массовое, но выборочное копирование нужных мне файлов в другую папку.
Возможно ли вообще силами VBA, написать такой макрос или макросы? Спасибо!Pavel2505
Sub FileManager() Dim i&, j&, i_n&, j_n& Dim Tabl$() Dim flag As Boolean, flag1 As Boolean i_n = Cells(Rows.Count, 2).End(xlUp).Row j_n = 5 ReDim Tabl(i_n, j_n) For i = 1 To i_n For j = 1 To j_n Tabl(i, j) = Cells(i, j) Next j Next i For i = 2 To i_n If Tabl(i, 3) <> "" Then flag = True Tabl(i, 4) = Left(Tabl(i, 4), InStrRev(Tabl(i, 4), "\")) & Tabl(i, 3) Else Tabl(i, 4) = Left(Tabl(i, 4), InStrRev(Tabl(i, 4), "\")) & Tabl(i, 1) End If If Dir(Tabl(i, 2), 16) = "" Then MsgBox "Останов из-за отсутствия файла " & Tabl(i, 2), vbCritical, "Ошибка": Exit Sub If UCase(Tabl(i, 5)) = "НЕТ" Then flag1 = True Name Tabl(i, 2) As Tabl(i, 4) ' Kill Tabl(i, 2) ElseIf UCase(Tabl(i, 5)) = "ДА" Then FileCopy Tabl(i, 2), Tabl(i, 4) End If If flag1 Then Tabl(i, 2) = Tabl(i, 4) If flag Then Tabl(i, 1) = Tabl(i, 3) End If flag = False flag1 = False End If Next i For i = 1 To i_n For j = 1 To j_n Cells(i, j) = Tabl(i, j) Next j Next i End Sub
[/vba] забыл отметить. Такой способ сработает только если путь, куда переносим/копируем уже есть... иначе придётся делать всё по-другому.
Pavel2505, типа того? [vba]
Код
Sub FileManager() Dim i&, j&, i_n&, j_n& Dim Tabl$() Dim flag As Boolean, flag1 As Boolean i_n = Cells(Rows.Count, 2).End(xlUp).Row j_n = 5 ReDim Tabl(i_n, j_n) For i = 1 To i_n For j = 1 To j_n Tabl(i, j) = Cells(i, j) Next j Next i For i = 2 To i_n If Tabl(i, 3) <> "" Then flag = True Tabl(i, 4) = Left(Tabl(i, 4), InStrRev(Tabl(i, 4), "\")) & Tabl(i, 3) Else Tabl(i, 4) = Left(Tabl(i, 4), InStrRev(Tabl(i, 4), "\")) & Tabl(i, 1) End If If Dir(Tabl(i, 2), 16) = "" Then MsgBox "Останов из-за отсутствия файла " & Tabl(i, 2), vbCritical, "Ошибка": Exit Sub If UCase(Tabl(i, 5)) = "НЕТ" Then flag1 = True Name Tabl(i, 2) As Tabl(i, 4) ' Kill Tabl(i, 2) ElseIf UCase(Tabl(i, 5)) = "ДА" Then FileCopy Tabl(i, 2), Tabl(i, 4) End If If flag1 Then Tabl(i, 2) = Tabl(i, 4) If flag Then Tabl(i, 1) = Tabl(i, 3) End If flag = False flag1 = False End If Next i For i = 1 To i_n For j = 1 To j_n Cells(i, j) = Tabl(i, j) Next j Next i End Sub
[/vba] забыл отметить. Такой способ сработает только если путь, куда переносим/копируем уже есть... иначе придётся делать всё по-другому.Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Четверг, 12.05.2016, 22:12
Pavel2505, еще один вариант. Поняла так, что в колонке 3 стоит правильное имя файла, которое должно получиться после копирования: [vba]
Код
Sub renameJPG() On Error Resume Next Dim objFile As Object Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Set objFile = fso.GetFile(Cells(i, 1)) If Cells(i, 2) <> "" Then objFile.Name = Cells(i, 2) FileCopy objFile, Cells(i, 2) End If If Cells(i, 3) <> "" And Cells(i, 4) = "ДА" Then FileCopy objFile, Cells(i, 3) End If Next i End Sub
[/vba]
Pavel2505, еще один вариант. Поняла так, что в колонке 3 стоит правильное имя файла, которое должно получиться после копирования: [vba]
Код
Sub renameJPG() On Error Resume Next Dim objFile As Object Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Set objFile = fso.GetFile(Cells(i, 1)) If Cells(i, 2) <> "" Then objFile.Name = Cells(i, 2) FileCopy objFile, Cells(i, 2) End If If Cells(i, 3) <> "" And Cells(i, 4) = "ДА" Then FileCopy objFile, Cells(i, 3) End If Next i End Sub