Создание анимированного обратного отсчета

Рэй хотел бы, если возможно, иметь способ анимировать «подсчет» для значения в ячейке. Например, в ячейке B7 он может иметь значение 23. Он хотел бы сослаться на это значение в ячейке E4, и чтобы ячейка E4 считала от 0 до 23 (0, 1, 2, 3 и т. Д.), Показывая каждое число. по очереди.

В Excel нет встроенного способа сделать это, но вы можете использовать макрос для создания анимации. По сути, макросу необходимо выяснить, что находится в ячейке B7, а затем использовать цикл For … Next для перехода по значениям между 0 и тем, что находится в B7. Во время каждой итерации цикла значение в E4 изменяется, и вводится какая-то задержка.

Часть задержки макроса – это то, что на самом деле дает возможность изменять то, как макрос выполняет свою работу. . Задержка необходима, чтобы анимация работала; без него числа в E4 увеличивались бы слишком быстро. Excel предоставляет несколько удобных способов реализовать задержку. Например, в этом примере макроса используется функция сна:

 #If VBA7 ThenPrivate Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #ElsePrivate Declare Sub Sleep Lib "kernel32"  (ByVal dwMilliseconds As Long) #End IfPrivate Sub Worksheet_Change (ByVal Target As Range) Dim n As Integer Const cellWatch As String = "$ B $ 7" Const cellCount As String = "$ E $ 4" Const msec As Long = 200 'миллисекунд, если  Target.Address = cellWatch Then Application.EnableEvents = False Range (cellCount) .Show If IsNumeric (Target) Then For n = 0 To Target 'пропущено, если Target  

Этот код следует добавить в модуль ThisWorksheet, так как он предназначен для запуска каждый раз, когда что-то изменяется на листе. Код проверяет, является ли изменяемая ячейка целевой ячейкой (B7). Если это так, то он захватывает это значение и переходит в цикл For ... Next, который обновляет все, что находится в ячейке E4. Функция Sleep используется для задержки, в этом случае 200 миллисекунд между каждым обновлением E4.

Если вам нужен макрос, который короче и не зависит от обработчика событий Worksheet_Change, вы можете учтите следующее. Он использует метод Wait для паузы в цикле For ... Next:

 Sub CountUp () Dim J As Integer For J = 0 To Range ("B7"). Диапазон значений ("E4  ") .Value = J Application.Wait (Now + TimeValue (" 0:00:01 ")) Следующий диапазон J (" E4 "). Value = Range (" B7 "). ValueEnd Sub 

Эта версия макроса делает паузу на целую секунду между каждым обновлением ячейки E4.

Всякий раз, когда вы используете такой макрос, который реализует некоторую задержку, помните, что ваш рабочий лист может казаться менее отзывчивым. Это связано с этой задержкой и каким бы большим ни было значение в ячейке E4. (Чем больше значение, тем больше совокупная задержка.)

Оцените статью
Frestage.ru
Добавить комментарий