Страницы: 1
RSS
Нужно ли отключение экрана/ событий и т.д., если приложение скрыто?
 
Доброго здоровья всем!
Такой вот вопрос:
Код
Application.Visible = False
UserForm1.Show

Не влияют ли при этом ScreenUpdating, EnableEvents и т.д.?

Необходимо ли для ускорения работы с другими книгами или листами в текущей отключать всё?

Изменено: Azakia - 16.09.2020 16:12:50
 
Хуже не будет, если укажете.
EnableEvents - мне кажется всё равно будет работать. Попробуйте сделать Worksheets(1).delete - если выскочит уведомление об удаление листа, то значит События работают

P.S. Я бы отключал всё
Изменено: New - 16.09.2020 16:21:04
 
New, если с событиями ясно, то как понять работает ли всё таки ScreenUpdating при невидимом приложении? :D  
 
Какой вариант быстрее всего? У меня 10-9-6

Код
Sub test1()
Dim i As Long
Dim Start As Single

    Start = Timer
    
    For i = 1 To 500000
        Cells(i, 1) = i
    Next i
    
    MsgBox "Затрачено времени: " & Format((Timer - Start) / 24 / 60 / 60, "nn:ss"), vbInformation, "Конец"
End Sub
Код
Sub test2()
Dim i As Long
Dim Start As Single

    Start = Timer
    Application.Visible = False

    For i = 1 To 500000
        Cells(i, 1) = i
    Next i
    
    Application.Visible = True
    MsgBox "Затрачено времени: " & Format((Timer - Start) / 24 / 60 / 60, "nn:ss"), vbInformation, "Конец"
End Sub
Код
Sub test3()
Dim i As Long
Dim Start As Single

    Start = Timer
    
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
    End With
    
    For i = 1 To 500000
        Cells(i, 1) = i
    Next i
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
    End With
    
    MsgBox "Затрачено времени: " & Format((Timer - Start) / 24 / 60 / 60, "nn:ss"), vbInformation, "Конец"
End Sub
Изменено: New - 16.09.2020 17:00:37
 
Вы бы объединили в один макрос, для удобства тестирования.
Скрытый текст

Затрачено времени, v1: 00:12
Затрачено времени, v2: 00:12
Затрачено времени, v3: 00:06
«Бритва Оккама» или «Принцип Калашникова»?
 
Не хочу, так как ТС новичок в VBA и ничего не поймёт из общего одного макроса и ТС не знает про Debug.Print и где его смотреть.
Я не люблю для новичков писать сложные макросы, в которых они ничего не поймут.
Если бы я писал код для вас, чтобы что-то обсудить с вами, то да. Всё логично. Но для новичка не подойдёт.

P.S. Тут постоянно приходят новички, выкладывают вот такой "урезанный/сокращённый" код и просят что-то в нём подправить и я понимаю, что какой-то профессионал с нашего форума его написал, но для ТС он вообще не понятен и он не может в нём разобраться и подправить самостоятельно код. Я стараюсь для новичков в VBA писать код более расширено и подробно, путь даже будет медленнее работать, но ТС сам сможет через месяц зайти в него и подправить под свои нужны. Чем быстро - но через месяц ТС придёт, выложит код на форум и скажет - а как тут поменять столбец в коде?
Изменено: New - 16.09.2020 17:48:43
 
В чем сложность кода? В том, что я объединил три ваших отдельных макроса (который каждый нужно выполнять отдельно, затрачивая время хотевшему помочь специалисту) и поменял MsgBox на Debug.Print, что бы вручную не переписывать время? Новичкам надо учится, ну или платный раздел никто не закрывал.
«Бритва Оккама» или «Принцип Калашникова»?
 
Каждый останется при своём мнении.

P.S. Я тут как-то коллеге (мужчине 40 лет) 30 минут объяснял код (цикл)

Код
For i=1 to 100
     Cells(i,1) = 5
Next i

Он его не понял. У меня 2 высших педагогических образования  
Изменено: New - 16.09.2020 17:52:57
 
New, сходу по кодам скажу, что третий, конечно же, лидер!  :)
Но в нем как раз не хватает того, что меня интересует - Application.Visible = False
Тем не менее, да, оно влияет, но от ситуации к ситуации, например, если лист пустой, то .Calculation не нужен...

Ребят, спасибо за ответы

P.S. а вот это неверно  :D
Цитата
New написал:
ТС не знает про Debug.Print и где его смотреть.
 
Application.Visible = False есть во 2м коде (а в первом нет его), а время выполнения 1-го и 2-го кода одинаковое - какой вывод можно сделать?

p.s. вы спрашиваете вопросы на форуме, которые сами можете протестировать на своем компьютере, в примере кода я показал, что это очень не сложно.
Изменено: New - 17.09.2020 10:33:46
 
Цитата
New написал:
Application.Visible = False есть во 2м коде (а в первом нет его), а время выполнения 1-го и 2-го кода одинаковое - какой вывод можно сделать?
поэтому я и имел в виду 3й...
 
Ну, и для новичков неплохо бы указать, что при правильном алгоритме занесения значений ячеек листа самый быстрый из трех предложенных вариантов можно ускорить еще раз в 20. :)  
Владимир
 
Ну, автор спрашивал влияет ли строка
Application.Visible = False
на быстроту работы макроса.
Мой тест показывает, что не влияет.

ps. Конечно можно увеличить скорость - заполнить массив и выгрузить его на лист. Только это к вопросу ТС не имеет отношения
 
Согласен! :)  
Владимир
Страницы: 1
Наверх