Создание анимированного обратного отсчета (Microsoft Excel)
Рэй хотел бы, если это возможно, способ анимировать «подсчет» для значения в ячейке. Например, в ячейке B7 он может иметь значение 23. Он хотел бы сослаться на это значение в ячейке E4, и чтобы ячейка E4 считала от 0 до 23 (0, 1, 2, 3 и т. Д.), Показывая каждое число. в очереди.
В Excel нет встроенного способа сделать это, но вы можете использовать макрос для создания анимации. По сути, макросу необходимо выяснить, что находится в ячейке B7, а затем использовать цикл For … Next для перехода по значениям между 0 и тем, что находится в B7. Во время каждой итерации цикла значение в E4 изменяется и вводится некоторая задержка.
Задержка макроса — это то, что на самом деле дает возможность изменять способ выполнения макроса своей работы. Задержка необходима, чтобы анимация работала; без него числа в E4 увеличивались бы слишком быстро. В Excel есть несколько удобных способов реализовать задержку. Например, в этом примере макроса используется функция сна:
#If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If Private 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 ' milliseconds If Target.Address = cellWatch Then Application.EnableEvents = False Range(cellCount).Show If IsNumeric(Target) Then For n = 0 To Target ' skipped if Target < 0 Range(cellCount) = n Sleep msec ' delay each increment Next n End If Range(cellCount) = Target Application.EnableEvents = True End If End Sub
Этот код следует добавить в модуль ThisWorksheet, так как он предназначен для запуска каждый раз, когда что-то изменяется на листе. Код проверяет, является ли изменяемая ячейка целевой ячейкой (B7). Если это так, то он захватывает это значение и переходит в цикл For … Next, который обновляет все, что находится в ячейке E4. Функция сна используется для задержки, в этом случае, 200 миллисекунд между каждым обновлением E4.
Если вам нужен макрос, который короче и не полагается на обработчик событий Worksheet_Change, вы можете подумать о следующем. Он использует метод Wait для паузы в цикле For … Next:
Sub CountUp() Dim J As Integer For J = 0 To Range("B7").Value Range("E4").Value = J Application.Wait (Now + TimeValue("0:00:01")) Next J Range("E4").Value = Range("B7").Value End Sub
Эта версия макроса делает паузу в полсекунды между каждым обновлением ячейки E4.
Всякий раз, когда вы используете такой макрос, который реализует некоторую задержку, помните, что ваш рабочий лист может показаться менее отзывчивым. Это связано с этой задержкой и каким бы большим ни было значение в ячейке E4. (Чем больше значение, тем дольше совокупная задержка.)
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (13753) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.