Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос массового изменения и копирования файлов - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос массового изменения и копирования файлов (Иное/Other)
Макрос массового изменения и копирования файлов
Pavel2505 Дата: Четверг, 12.05.2016, 18:18 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте!
Недавно столкнулся с проблемой массового изменения файлов, но не по шаблону, как это умеют многие программы, а таким образом, какими я их назову.
Т.е. есть файл - qwerty.jpg, а мне его нужно заменить на asdfg.jpg, названия следующим файлам также задаю сам, причем хотелось бы делать это через EXСEL, так как удобнее и быстрее корректировать в таблице.
На данный, момент есть список названия файлов, который я загнал в EXСEL и на основе его хочу отредактировать их названия и потом при помощи макроса разом их все переименовать.

Также после переименования всех файлов требуется массовое, но выборочное копирование нужных мне файлов в другую папку.

Возможно ли вообще силами VBA, написать такой макрос или макросы? Спасибо!
К сообщению приложен файл: ____.xlsx(10Kb)
 
Ответить
СообщениеЗдравствуйте!
Недавно столкнулся с проблемой массового изменения файлов, но не по шаблону, как это умеют многие программы, а таким образом, какими я их назову.
Т.е. есть файл - qwerty.jpg, а мне его нужно заменить на asdfg.jpg, названия следующим файлам также задаю сам, причем хотелось бы делать это через EXСEL, так как удобнее и быстрее корректировать в таблице.
На данный, момент есть список названия файлов, который я загнал в EXСEL и на основе его хочу отредактировать их названия и потом при помощи макроса разом их все переименовать.

Также после переименования всех файлов требуется массовое, но выборочное копирование нужных мне файлов в другую папку.

Возможно ли вообще силами VBA, написать такой макрос или макросы? Спасибо!

Автор - Pavel2505
Дата добавления - 12.05.2016 в 18:18
Roman777 Дата: Четверг, 12.05.2016, 22:00 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 783
Репутация: 88 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
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 - Четверг, 12.05.2016, 22:12
 
Ответить
Сообщение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
Дата добавления - 12.05.2016 в 22:00
Manyasha Дата: Четверг, 12.05.2016, 23:59 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 1997
Репутация: 829 ±
Замечаний: 0% ±

Excel 2010, 2016
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]


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение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]

Автор - Manyasha
Дата добавления - 12.05.2016 в 23:59
Pavel2505 Дата: Пятница, 13.05.2016, 12:21 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Огромное спасибо! Все работает как нужно!!!
 
Ответить
СообщениеОгромное спасибо! Все работает как нужно!!!

Автор - Pavel2505
Дата добавления - 13.05.2016 в 12:21
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос массового изменения и копирования файлов (Иное/Other)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!