Перейти к содержимому

VBA Excel. Бегущая, ползущая и танцующая строки

Бегущая, ползущая и танцующая строки в VBA Excel. Использование цикла For...Next и метода Application.Wait для задержки выполнения кода. Скачать файл с примером.

  1. Бегущая строка
  2. Ползущая строка
  3. Танцующая строка
  4. Файл для скачивания

В VBA Excel нет объекта «Таймер», который мог бы управлять кодом при создании визуальных эффектов, поэтому для задержки приходится использовать циклы или метод Application.Wait, которые грузят компьютер. Использовать такие программы можно в учебных целях, а также для личного наблюдения и демонстрации этих визуальных эффектов. Приведенные здесь примеры лучше запускать с помощью кнопок из панели «Элементы управления формы», размещенных на рабочем листе.

Бегущая строка

Вариант №1

Этот вариант кода используется для создания бегущей строки в отдельной или объединенной ячейке, а также его можно применить для свойства Caption пользовательской формы.

Sub BegushchayaStroka()
Dim stroka1 As String, stroka2 As String, _
probely As Integer, dlina As Integer, _
kolichestvo As Integer, zaderzhka As Long

stroka1 = "Моя бегущая строка"
probely = 10
kolichestvo = 3
zaderzhka = 500

stroka1 = space(probely) & stroka1
dlina = Len(stroka1)

Dim i1 As Integer, i2 As Integer, i3 As Integer
For i1 = 1 To kolichestvo
For i2 = 1 To dlina
stroka2 = Right(stroka1, dlina - i2) & Left(stroka1, i2)
'---------------------------------
Cells(3, 5) = stroka2
'---------------------------------
For i3 = 1 To zaderzhka
Cells(100, 1) = ""
Next
'---------------------------------
Next
Next
End Sub

Описание переменных:

  • stroka1 - исходный текст бегущей строки;
  • stroka2 - меняющийся в цикле текст и присваиваемый ячейке с бегущей строкой;
  • probely - количество пробелов, добавляемых перед исходным текстом, чтобы отделить одно бегущее словосочетание от следующего;
  • dlina - длина исходной строки с добавленными пробелами;
  • kolichestvo - количество пробегов исходной строки;
  • zaderzhka - максимальное количество выполнений цикла задержки, используется для регулирования скорости движения бегущей строки;
  • i1, i2, i3 - счетчики циклов.

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

Бегущая строка наблюдается в ячейке Cells(3, 5), которой циклом присваивается меняющееся значение переменной stroka2. Вы можете использовать любую фиксированную ячейку или ActiveCell. Для более качественного визуального эффекта используйте в ячейке с бегущей строкой моноширинный шрифт (Courier New, MS Reference Sans Serif), так как у пропорционального шрифта очень короткие пробелы и на них бегущая строка сильнее замедляется.

Остановить выполнение макроса до его завершения можно, дважды нажав клавишу «Esc», или сочетанием клавиш «Ctrl+Break» (протестировано в Excel 2016).

Вариант №2

Еще одну интересную бегущую строку можно наблюдать, когда каждому символу строки соответствует отдельная ячейка. Для этого необходимо в предыдущем коде заменить строку

Cells(3, 5) = stroka2

на строки

For i3 = 1 To dlina
Cells(1, i3) = Mid(stroka2, i3, 1)
Next

Бегущая строка будет наблюдаться в первой строке рабочего листа. Цикл будет заполнять ячейки первой строки символами, содержащимися в значении переменной stroka2. Ничего страшного, что переменная счетчика i3 будет использоваться дважды, так как циклы не являются вложенными и выполняются отдельно друг от друга.

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

Ползущая строка

Для замедления кода при создании визуальных эффектов можно использовать метод Application.Wait, который позволяет замедлить каждую итерацию цикла минимум на 1 секунду. С одной секундой задержки можно получить только ползущую строку, но никак не бегущую. Наблюдение за ползущей строкой в одной или объединенной ячейке сразу вызывает желание остановить макрос. Это можно сделать однократным нажатием клавиши «Esc» или сочетанием клавиш «Ctrl+Break».

Лучше смотрится ползущая строка, когда каждый символ занимает отдельную ячейку, поэтому на таком варианте можно продемонстрировать задержу с помощью метода Application.Wait. Для этого в коде первого варианта необходимо строки

'---------------------------------
Cells(3, 5) = stroka2
'---------------------------------
For i3 = 1 To zaderzhka
Cells(100, 1) = ""
Next
'---------------------------------

заменить на строки

'---------------------------------
For i3 = 1 To dlina
Cells(1, i3) = Mid(stroka2, i3, 1)
Next
'---------------------------------
Application.Wait (Now + TimeValue("0:00:01"))
'---------------------------------

Не обращайте внимания на ставшую ненужной переменную zaderzhka, которая на работу кода не повлияет.

Танцующая строка

В этом примере будем использовать задержку с помощью цикла For...Next, так как метод Application.Wait здесь совершенно не подходит.

Sub TantsuyushchayaStroka()
Dim stroka1 As String, stroka2(14) As Variant, _
probely As Integer, _
kolichestvo As Integer, zaderzhka As Long

stroka1 = "Моя танцующая строка"
probely = 15
kolichestvo = 3
zaderzhka = 500

stroka2(0) = space(probely / 2) & stroka1 _
& space(probely / 2)
stroka2(1) = ""
stroka2(2) = space(probely / 2) & stroka1 _
& space(probely / 2)
stroka2(3) = ""
stroka2(4) = space(probely / 2) & stroka1 _
& space(probely / 2)
stroka2(5) = ""
stroka2(6) = stroka1 & space(probely)
stroka2(7) = ""
stroka2(8) = stroka1 & space(probely)
stroka2(9) = ""
stroka2(10) = space(probely) & stroka1
stroka2(11) = ""
stroka2(12) = space(probely) & stroka1
stroka2(13) = ""
stroka2(14) = space(probely / 2) & stroka1 _
& space(probely / 2)

Dim i1 As Byte, i2 As Integer, i3 As Integer
  For i1 = 1 To kolichestvo
    For i2 = 0 To 14
      Cells(5, 5) = stroka2(i2)
      For i3 = 1 To zaderzhka
        Cells(100, 1) = ""
      Next
    Next
  Next
End Sub

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

Файл для скачивания

Для ознакомления можете скачать по этой ссылке архив с файлом в формате Excel 2007-2016 (.xlsm), в котором есть процедуры (и кнопки для их запуска), создающие

  • ползущую строку в первой строке рабочего листа;
  • бегущую строку в 5 ячейке 3 строки;
  • танцующую строку в 5 ячейке 5 строки.

Возможно, вам придется значительно уменьшить значение переменной zaderzhka, так как эти макросы тестировались на компьютере с высокой производительностью. Ползущая строка, независимо от внешних факторов, будет перемещаться со скоростью один знак в секунду благодаря применению для задержки метода Application.Wait.