- •9. Операторы цикла
- •Оператор цикла For–Next
- •Примеры использования оператора цикла For–Next
- •Оператор цикла Do–Loop
- •Примеры использования оператора цикла Do–Loop
- •Оператор цикла While–Wend
- •Оператор цикла For Each – Next
- •Примеры использования оператора цикла For Each – Next
- •Игровые примеры использования операторов цикла
- •Движущаяся диаграмма
- •Случайно мигающие ячейки
Случайно мигающие ячейки
Еще одна простая программа, макрос Makt, включает и выключает огоньки-ячейки на рабочем листе. Имя рабочего листа не используется, поэтому программа работает на любом открытом листе. Для запуска программы сделайте комбинацию клавиш <Ctrl+t>.
Sub Makt()
Dim i As Long, kr As Long, kc As Long
Dim BegTime As Single, Start As Single
Dim PauseTime As Single
Range("A1").Select
Selection.NumberFormat = "0.0"
PauseTime = 0.2 ' пауза в секундах
BegTime = Timer ' начало работы
For i = 1 To 50
kr = Rnd * 20: kc = Rnd * 10
Range("A2").Offset(kr, kc).Select
With Selection.Interior
.ColorIndex = kr + kc
.Pattern = xlSolid
End With
Start = Timer ' начало паузы
Range("A1").Value = Round(Start - BegTime, 1)
Do While Timer < Start + PauseTime
Loop
Selection.Interior.ColorIndex = xlNone
Next i
Range("A1").Select
End Sub
Пояснения к программе.
В цикле For Next будем включать (закрашивать фон) и выключать ячейки (удалять цвет). В цикл For Next вставим паузу, цикл Do Loop (как в предыдущей программе), чтобы увидеть перекрашивание ячеек.
Функция VBA Rnd возвращает псевдослучайное число в интервале от 0 до 1. Умножая Rnd на 10 и на 20, на рабочем листе вычисляем случайный адрес ячейки как сдвиг относительно ячейки A2 на случайное число строк kr (от 0 до 20) и на случайное число столбцов kc (от 0 до 10).
У выделенной ячейки закрашиваем фон случайным цветом с номером kr+kc в операторе With End With.
Функция VBA Timer возвращает время начала паузы Start. Паузу создает цикл Do Loop. Он прекращает свою работу, когда Timer вернет время, превышающее Start+PauseTime. Для цвета фона ячейки задается значение xlNone – не установлен.
Чтобы следить за работой программы, на каждом витке цикла в ячейку A1 выводится время, прошедшее с начала работы программы. Для длительности паузу 0,2 сек. и 50 тактов цикла накопилось время 10 секунд. Это говорит о том, что перемещение табличного курсора и перекрашивание ячеек происходит практически мгновенно.
