Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Как правильно внедрить в код макроса прогресс бар
 
Код
Sub Размножить()
    Dim lngCalc As Long
    Dim n&
    n = Val(InputBox("n ="))
     
    Application.ScreenUpdating = False
    lngCalc = Application.Calculation
    Application.Calculation = xlCalculationManual
    Application.DisplayAlerts = False
     
    Range("g1:h1").Copy Range("g2:h2").Resize(1 * n)
     
    Application.ScreenUpdating = True
    Application.Calculation = lngCalc
    Application.DisplayAlerts = True
    MsgBox "Готово!", vbInformation
End Sub
 
В этот никак. Смысла нет. Прогресс-бары внедряются в циклы, а у Вас только одна рабочая строка.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий Щербаков, можно написать и через цикл, но тогда увеличится время работы макроса.
 
kolevchuk, ссыль
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
какой прогрессбар вы рассчитываете увидеть для этого макроса?)
 
kolevchuk, какой смысл в прогрессбаре в Вашем случае? Всего одна операция, Вы только моргнуть успеете.
Цитата
kolevchuk написал:
увеличится время работы макроса
А прогрессбар всегда будет увеличивать время.
 
Dima S, хотя бы, количество пройденных строк.
 
Цитата
Юрий М написал:
Вы только моргнуть успеете
Не, не успеет  :D
"Все гениальное просто, а все простое гениально!!!"
 
Юрий М, операция повторяется до 1 000 000 раз.
 
Не вижу этого в коде.
 
Извините великодушно, а какой смысл в прогрессбаре после этой инструкции:
Код
   Application.ScreenUpdating = False
??  :sceptic:
Кому решение нужно - тот пример и рисует.
 
Цитата
kolevchuk написал:
операция повторяется до 1 000 000 раз
какая именно? Я, видимо, слишком мало смыслю в программирование, чтобы увидеть эти повторы. Носом не ткнете?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Пытливый, в исходном коде она нужна, с прогресс баром нет, к чему этот вопрос?
 
Дмитрий Щербаков,
Код
Range("g1:h1").Copy Range("g2:h2").Resize(1 * n)
 
Цитата
kolevchuk написал:
к чему этот вопрос?
А к тому, что Вы показываете код, к которому хотите прикрутить прогрессбар.
 
kolevchuk,чтобы увидеть какая строка обрабатывается и для прогресс-бара нужен цикл.
 
для того чтобы показать прогресс - нужно знать время выполнения операции или количество циклов.
тогда текущий прогресс = пройдено времени(циклов)/общее время(к-во циклов)*100%.
в вашем случае если говорить о времени - общее неизвестно, можете отобразить только пройденное время.
если о количестве скопированных строк - неизвестно сколько уже скопировано в данный момент.
Далее у вас используется Application.ScreenUpdating, что не даст обновить информацию о статусе, а если отключить - замедлит выполнение операции.
Короче - в вашем случае статусбар не имеет смысла.
Разве что проведите тестовое копирование, замерьте время и перед началом сделайте MsgBox Application.StatusBar = "Операция займет приблизительно 10 минут, можете сходить попить кофе" :)
Изменено: Dima S - 5 Апр 2018 12:44:38
 
Anchoret, посоветуйте, пожалуйста, как это сделать в цикле.
 
А это уже вопрос не по теме.
 
Цитата
kolevchuk написал:
как это сделать в цикле
читали бы ответы — не возникло бы вопроса… #4

Господа — вы должны это видеть  :D добавлю в анекдоты))
Изменено: Jack Famous - 5 Апр 2018 12:53:10
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Зачем зацикливать один и тот же код, в чем идея? Посмотреть как работает прогресс бар? Возьмите Уокенбаха, сделайте как в книге написано и наслаждайтесь  :D
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
kolevchuk написал:
как это сделать в цикле
для начала СДЕЛАЙТЕ ЦИКЛ. Пока кроме Вам никто не понимает что Вы вообще хотите в цикле сделать и главное - зачем?
Вот Вам примеры - выбирайте: Отобразить процесс выполнения кода
Изменено: Дмитрий Щербаков - 5 Апр 2018 13:15:39
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Читают тему (гостей: 1)