Страницы: 1
RSS
Применение макроса ко всем файлам в папке., Написал (спер и дописал) код VBA который помогает изменять формат файлв с xls на xlsx в выбранной папке.
 

Данный код

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 (Удалил лишний эллемент (место для вставки кода))
 
Почему в Курилке?
 
Цитата
2) Можно использовать с другими макросами
это как?
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
Kor написал:
   MsgBox "Начинаем?"      
Ого, а тут викторина!
Цитата
vikttur написал:
Почему в Курилке?
Видимо, потому-что не вопрос, а утверждение.
Kor, не понятно, почему "t" а не "нулевой", например?
И вообще, все дело в первом тэге - там скрытый код!
 
Цитата
vikttur написал:
Почему в Курилке?
Вить, а где?
В "вопросах.." - так нет вопроса
в "готовых..." - так нет раздела
в "копилке..." - так афроамериканцоидам неграм, туда вход закрыт
 
Цитата
bedvit написал:
это как?
Удалить обозначенную часть и написать другой код или сослаться на другой макрос. Там подписи есть.
Вообще это все делается для чайников, вроде меня т.к. благодаря этим подписям в коде я двигаюсь в обучении.
Если получится, то я помогу кому-ниудь сделать подобную работу быстрее.
Изменено: Kor - 10.09.2018 00:40:37
 
Alec Perle, лишнюю часть (верхнее место для кода) удалил нафиг. Долго разбираля, как его убрать.
Написано, что чать кода спер у других на просторе интернета, а "t" - это таймер  
 
Цитата
Kor написал:
Удалить обозначенную часть и написать другой код или сослаться на другой макрос
это можно сделать в любом макросе, не только в вашем. Для чего это сообщение?
Цитата
Kor написал:
MsgBox "Начинаем?"      
делайте тогда уж возможность ответить "нет" и прекратить выполнение программы.
Цитата
Kor написал:
Если получится, то я помогу кому-ниудь сделать подобную работу быстрее.
похвально, но пока вам нужно немного поучится. Разные форумы, в т.ч. этот, дают хорошую возможность сделать это.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
делайте тогда уж возможность ответить "нет" и прекратить выполнение программы.
Вот так, как-то
Код
If MsgBox("Начинаем?", vbQuestion + vbYesNo) = vbNo Then Exit Sub

А еще
Код
t=Timer

поместил бы под вопросом "Начинаем?"
"Все гениальное просто, а все простое гениально!!!"
 
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
"Все гениальное просто, а все простое гениально!!!"
 
вот эты строку с комментарием вообще не понял?

     
Код
Columns("G:G").Select 
"Все гениальное просто, а все простое гениально!!!"
 
Немного переработал, вот что получилось, но без комментариев  :cry:

Скрытый текст
Изменено: Nordheim - 10.09.2018 15:42:53
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, If .Show = -1 Then... можно сократить просто до If .Show Then.... И вообще, честно говоря, не понял, о чём этот пост. А точнее, какие тут премудрости - я не понял.
There is no knowledge that is not power
 
Цитата
SuperCat написал:
А точнее, какие тут премудрости - я не понял
Я честно говоря тоже не понял, потому, что этот код часто встречается в обычных вопросах, и ничего в нем уникального просто нет.
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, Простите. но Ваш код не работатет =( в таком виде.  
 
Цитата
Kor написал:
Простите. но Ваш код не работатет =( в таком виде.
На какой строке ошибка? и что показывает код ошибки?
Я без тестирования коды не выкладываю, у меня все работает.
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, внешний вид этой строки не смущает?
Код
book.SaveAs FileName:=iPath & "x" & FileName
 
Цитата
RAN написал:
внешний вид этой строки не смущает?
ну елки палки, надо же так накосячить  8-0
"Все гениальное просто, а все простое гениально!!!"
 
Проблема в том, что файлы, которые создаются не открываются
Изменено: Kor - 10.09.2018 14:39:55 (добавление комментариев)
 
Проверил еще раз все открывается. А что за файл пытаетесь открыть? Это явно не созданный моим кодом. Иначе бы он назывался xПример1.xlsx
Изменено: Nordheim - 10.09.2018 14:40:09
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, Простите у Вас какая версия xl? возможнло возникают проблемы на этой почве?
хотя в коде не вижу формат сохранения xlsx
Изменено: Kor - 10.09.2018 14:47:32
 
MSOffice 2010. Макрос сохранят с тем же форматом, только добавляет первым символом в наименование "x"
Изменено: Nordheim - 10.09.2018 15:32:36
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
Макрос сохранят с тем же форматом
Отнюдь.
Цитата
Nordheim написал:
FileFormat:=51
Это жёстко заданный xlsx. Сохранение в том же формате у меня тут прописано.
Изменено: StoTisteg - 10.09.2018 17:51:07
 
Цитата
StoTisteg написал:
Цитата Nordheim  написал:Макрос сохранят с тем же форматомОтнюдь.
Эта фраза была написана перед тем, как код был отредактирован и задано жесткое условие
Цитата
StoTisteg написал:
Цитата Nordheim  написал:FileFormat:=51
"Все гениальное просто, а все простое гениально!!!"
Страницы: 1
Наверх