Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2017, 14:18   #1
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
Вопрос Анимация/статусбар во время макроса (Excel2003)

Доброго времени! Прошу помощи в реализации анимации на время выполнения макроса. Без выполнения сложной задачи все прекрасно работает. Как только что-то сложнее то уже не работает. Добавил паузу - виснет!!! Ну что ему не так?
Код:

Sub sKODOM()
    Animation.Show
    Animation.L1.FontSize = 10


    Animation.Caption = "Пример анимации"
    Animation.L1.Caption = "Подождите - идет заполнение ..."

    Animation.WebBrowser1.Navigate ThisWorkbook.Path & "\bipolar-balls.GIF"

Application.OnTime Now + TimeValue("00:00:01"), "FillBlankCellsWithRandomNumbers"
End Sub


Sub FillBlankCellsWithRandomNumbers()

    ' код с небольшой модификацией взят с http://excelvba.ru/code/FillBlankCellsWithRandomNumbers

    ' заполняет пустые ячейки выделенного диапазона
    ' случайными значениями от 1 до 12

    Dim cell As Range, ra As Range
    ' ограничиваем выделенный диапазон используемой областью листа
    Set ra = Range("A1:AA10000")    'Intersect(Selection, ActiveSheet.UsedRange)

    If ra Is Nothing Then
        MsgBox "В выделенном диапазоне нет пустых ячеек!", _
               vbExclamation, "Нечего заполнять"
    Else
        Application.ScreenUpdating = False    ' отключаем обновление экрана

        ' перебираем все ячейки в выделенном диапазоне
        For Each cell In ra.Cells
            ' если ячейка пустая - вычисляем случайное число, и заносим его в ячейку
            If Trim(cell) = "" Then cell = Fix(Rnd() * 12 + 1)
        Next cell

        ' можно и так - записать во все ячейки формулу,
        ' а потом заменить формулы значениями
        'ra.Formula = "=INT(RAND()*12+1)":         ra.Value = ra.Value
    End If
    Animation.Hide
End Sub

Sub bezKODA()

    Animation.Show
    Animation.L1.FontSize = 10
  
  
    Animation.Caption = "Пример анимации"
    Animation.L1.Caption = "Подождите - идет заполнение ..."

    Animation.WebBrowser1.Navigate ThisWorkbook.Path & "\bipolar-balls.GIF"
    
Application.OnTime Now + TimeValue("00:00:07"), "quit"
    
End Sub

Sub quit()
    Animation.Hide
End Sub
Вложения
Тип файла: rar пример анимации.rar (589.7 Кб, 8 просмотров)
xamillion вне форума Ответить с цитированием
Старый 10.02.2017, 17:05   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

во вложении анимация процесса выполнения в строке статуса.
Вложения
Тип файла: rar ПрогрессБар.rar (75.5 Кб, 15 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 10.02.2017, 17:54   #3
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
во вложении анимация процесса выполнения в строке статуса.
спасибо... это работает... это мы умеем )))

хотелось бы гифку WebBrowserом крутить...
xamillion вне форума Ответить с цитированием
Старый 10.02.2017, 18:25   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
' перебираем все ячейки в выделенном диапазоне
For Each cell In ra.Cells
' если ячейка пустая - вычисляем случайное число, и заносим его в ячейку
If Trim(cell) = "" Then cell = Fix(Rnd() * 12 + 1)
Next cell
хреновый код
максимально медленный

если сформировать массив случайных значений, и вывести массив на лист одной командой (можно и формулами, как у вас закоментировано) , то заполнение выполнится моментально, и всякие анимации не потребуются
EducatedFool вне форума Ответить с цитированием
Старый 10.02.2017, 19:17   #5
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

в том-то и дело что в оригинале еще медленнее код, пытался перевести на массивы, но там то количество символов в ячейке большое, то еще на чем-то запинается... уже смотрел в сторону java, но тут вообще темный лес для меня...

может есть какие-то приоритеты (выделение памяти) для процедуры или еще чего умнее?
xamillion вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Время работы макроса (несколько процедур) Евгений Таб Microsoft Office Excel 17 26.05.2016 21:33
запуск макроса в указанное время Razummoff Microsoft Office Excel 9 13.10.2015 10:44
Время выполнения макроса... nikolai_P Microsoft Office Excel 9 03.04.2013 00:59
Количество переданной информации в СтатусБар Dionix Работа с сетью в Delphi 4 10.07.2010 21:39
Запуск макроса в определенное время Юнлинг Microsoft Office Excel 2 15.10.2009 15:59