1) Считает время работы макроса 2) Можно использовать с другими макросами 3) Именяет формат файла P.S. если естьзамечания, то сразу же готов исправить, чтобы другим проще жить было.
Код
Sub Список_файлов()
Dim t As Long 'Задаем переменные
Dim первый As FileDialog
Dim второй As String
t = Timer 'Зафиксировать время (для расчета времени работы макроса)
MsgBox "Начинаем?" 'Выводим преупреждение о начале работы макроса
Set первый = Application.FileDialog(msoFileDialogFolderPicker)
первый.Title = "Выбери папку"
первый.AllowMultiSelect = False
первый.Show
второй = первый.SelectedItems(1)
третий = Dir(второй & "\*.xls")
Do While третий <> ""
'Debug.Print третий
'третий = Dir
Set wb = Workbooks.Open(второй & "\" & третий)
'Ниже написан код который заменяет один формат на другой (записал макрорекордером не обессутьте и переделал под себя)
Columns("G:G").Select 'Это нужно для того чтобы активировать открытый в предыдущей части кода лист (чтобы код доработал именно здесь)
ChDir ActiveWorkbook.Path 'Как я понял это место сохранения готового файла
ActiveWorkbook.SaveAs Filename:= _ '_-это перенос кода на другю строку
ActiveWorkbook.Path & "\" & ActiveWorkbook.Name & "x", FileFormat:= _ ' определяет путь к папке, определяет имя файла
xlOpenXMLWorkbook, CreateBackup:=False
'Run "Макрос1" 'Какой макрос работает? это для тех случаев если работать должен макрос который написан отдельно
wb.Close True: третий = Dir
Loop
MsgBox "Обработка данных продолжалась " & Timer - t & " сек.", vbInformation 'засекает время работы макроса
End Sub
Изменено: Kor - 10.09.2018 00:37:45(Удалил лишний эллемент (место для вставки кода))
Удалить обозначенную часть и написать другой код или сослаться на другой макрос. Там подписи есть. Вообще это все делается для чайников, вроде меня т.к. благодаря этим подписям в коде я двигаюсь в обучении. Если получится, то я помогу кому-ниудь сделать подобную работу быстрее.
Alec Perle, лишнюю часть (верхнее место для кода) удалил нафиг. Долго разбираля, как его убрать. Написано, что чать кода спер у других на просторе интернета, а "t" - это таймер
Kor, понятно, что подход у всех разный, но вот запоминать таймер в переменную точно нужно ПОСЛЕ MsgBox, т.к. в противном случаае вы засекаете не только время работы макроса, но и время до нажатия пользователем кнопки OK в MsgBox (что нафиг не нужно и ни о чём не говорит). К тому же, у вас целочисленная переменная для таймера, что не позволяет считать доли секунд. Обычно для подсчёта времени работы макроса используют тип Single (t!)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Переменная "первый" собственно ни к чему, можно вопользоваться конструкцией With ....End With
Код
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Выбери папку"
.AllowMultiSelect = False
If .Show = -1 Then второй = .SelectedItems(1) Else: MsgBox "Папка не выбрана!", vbCritical: Exit Sub
End With
"Все гениальное просто, а все простое гениально!!!"
Немного переработал, вот что получилось, но без комментариев
Скрытый текст
Код
Sub Список_файлов()
' ---------------------------------------------
Dim t As Date, fName$, iPath$, book As Workbook
' ---------------------------------------------
If MsgBox("Начинаем?", vbQuestion + vbYesNo) = vbNo Then Exit Sub
t = Timer
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Выбери папку"
.AllowMultiSelect = False
If .Show = -1 Then iPath = .SelectedItems(1) Else: MsgBox "Папка не выбрана!", vbCritical: Exit Sub
End With
iPath = iPath & Application.PathSeparator
fName = Dir(iPath & "*.xls*")
Application.ScreenUpdating = False
Do While fName <> ""
Set book = Workbooks.Open(iPath & fName)
book.SaveAs FileName:=iPath & "x" & fName , FileFormat:=51
'Какой-то макрос
book.Close True
fName = Dir
Loop
Application.ScreenUpdating = True
MsgBox "Обработка данных продолжалась " & vbNewLine & Format(Timer - t, "0.00") & " сек.", vbInformation
End Sub
Nordheim, If .Show = -1 Then... можно сократить просто до If .Show Then.... И вообще, честно говоря, не понял, о чём этот пост. А точнее, какие тут премудрости - я не понял.