If x Mod 4 = 1 Thenнас интересуют 1, 5, 9 и т. д. строки. Номера этих строк делятся на 4 с остатком 1. Для определения целочисленного остатка используем встроенную функция mod.

otvet = MsgBox(a$, 1) – Используя функцию MsgBox, выводим на экран номер строки (в строковой переменной a$), и если пользователь отвечает «ОК», то переменная otvet становится равной 1. Подробности по этой функции смотрите в справочной системе.

Кнопка «Сброс», находящаяся на форме, по щелчку запускает процедуру, которая закрывает форму через метод Hide: UserForm1.Hide.

В следующем разделе мы познакомимся с развитием этого примера, когда информация размещенная на форме переносится в рабочий лист электронной таблицы.

Однорукий бандит

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

Сначала о логике игры. С помощью встроенной функции в трех ячейках создаются случайные числа в диапазоне от 1 до 9. С помощью функции «Если…» происходит попарно сравнение этих чисел, и при совпадение одной любой пары в соответствующей ячейке устанавливается выражение «Истина». За это отвечает блок F3:H3. В ячейке I3 значение «Истина» будет, если совпадет хоть одна пара, а в I4 – если все пары. В соседнем столбце J будут изменяться число набранных баллов. Для ложного результата – это –10, а для истинного или 15, или 30. Для добавления к общему числу баллов берется максимальное значение, полученное за очередной ход.

НЕ нашли? Не то? Что вы ищете?

Dim Ball As Integer, xod As Integer

В блоке General объявляем две переменные

Private Sub CommandButton1_Click()

Процедура для кнопки «Новая игра»

xod = 0

Задаем начальное значение для числа ходов…

Ball = 300

И количества баллов

Label1.Caption = Ball

Выводим эти значения в соответствующие окошки

Label2.Caption = xod

CommandButton1.Enabled = False

Теперь эта кнопка не нужна и она неактивна.

End Sub

Private Sub CommandButton2_Click()

Процедура для кнопки «Ваш ход»

If Ball > 0 Then

Процедура работает, если у Вас есть очки

Calculate

Пересчет рабочего листа, появление новых чисел

xod = xod + 1

Число ходов увеличено на 1

Ball = Ball + Cells(5, 10)

А число баллов изменилось в зависимости от выпавших чисел

Label1.Caption = Ball

Результат отображается в соответствующих окошках

Label2.Caption = xod

Else

Если Вы «обанкротились»

CommandButton1.Enabled = True

То можно начать «Новую игру»

End If

End Sub

Для игры сначала нажмите «Новая игра», а затем многократно нажимайте «Ваш ход», пока не проиграете. Победит тот, кто продержится больше ходов. Успеха Вам. Этот пример иллюстрируется файлом «Однорукий бандит. xls”.

Секундомер

В этом примере Вы увидите, как могут быть связаны между собой отдельные процедуры, и как можно использовать VBA, не прибегая к событиям, связанным со стандартными элементами управления.

Идея программы заключалась в создании секундомера. В качестве «источника» времени используются часы компьютера. В VBA есть встроенная функция Timer, которая позволяет определить время в данный момент. На этот раз в отдельном блоке мы запишем три процедуры

Dim sstart As Single

В блоке General объявляем две переменные, одна из которых – логическая.

Dim flag As Boolean

Public Sub start()

Процедура по имени start

sstart = Timer

В переменной sstart запоминается значение текущего времени в тот момент, когда запущена процедура.

flag = True

Значение логической переменной - Истина

End Sub

Public Function ttimer()

Имя функции – ttimer

If flag Then ttimer = Timer - sstart

Если flag «разрешает», то есть имеет значение «Истина», то функция ttimer вычислит разницу между текущим временем и временем старта секундомера

End Function

Public Sub sstop()

Процедура остановки секундомера.

flag = False

Переменная flag получила значение Ложь и функция ttimer не «сработает»

sstart = 0

Произошел сброс секундомера.

End Sub

Работу секундомера будем наблюдать на отдельном листе. Причем, если пользователь щелкнет по ячейке со словом «start», то секундомер запустится, если по любой пустой ячейке, то на элементе управления Label появится время, прошедшее с момента старта. И для остановки секундомера достаточно выделить ячейку “Stop”. Посмотрите, какими инструкциями это обеспечивается.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Процойедура под стандартное собыие SelectionChange

If Target. Count = 1 Then

Важно, чтобыла выделена только одна ячейка. Свойство Count - количество ячеек.

Одновременно начинает В этом случае выполняются коды внутри блока If

If Target = "start" Then

Затем, смотрим какая ячейка выделена. Если это “Start”, то

Label1 = 0

Показываем в надписи 0,

start

Запускаем процедуру start

End If

И выходим из этого блока

If Target = "stop" Then sstop

Если выделена “Stop”, то вызываем процедуру остановки секундомера

If Target = "" Then Label1 = ttimer

Если выделена любая пустая ячейка, в надписи отображается время, вычисленное функцией ttimer.

End If

Выход из внешнего блока If…EndIf.

End Sub

Этот пример иллюстрирован файлом “Секундомер. xls”

Живая диаграмма

Наступила пора рассказать еще об одной замечательной возможности VBA – о «живых» диаграммах. Большинство пользователей знают, что в электронной таблице можно построить самые разные диаграммы. Оказывается, можно сделать так, что диаграммы и графики оживут. Давайте создадим простейшую модель вращения Луны вокруг Земли.

Упражнение 8

Откройте чистую рабочую книгу. Убедитесь, что Вы находитесь на Листе1. Занесите в ячейки таблицы данные в соответствии с таблицей, в которой указаны только необходимые элементы

Адрес ячейки

Содержимое

A2

0

Параметр

B2

=5*cos(A2)

Х-координата Луны

C2

=5*sin(A2)

Y – координата Луны

D2

1

Размер Луны

E2

4

Число оборотов

B3

0

Х координата Земли

C3

0

Y - координата Земли

D3

5

Размер Земли

E3

=ПИ()

Число Пи

E4

=2*E3*E2

Максимальное значение параметра


Сравните, что получилось у Вас, с тем, что изображено на рисунке. Надписи в ячейках используются для пояснений. Выделите блок B2:D5 и с помощью Мастера Диаграмм постройте пузырьковую диаграмму. Для первого ряда используются данные B2:D2, а для второго ряда – B3:D3. Используя приемы работы с диаграммой, откройте окно «Формат оси» для оси Y и установите максимальное и минимальное значение оси соответственно 6 и -6. Уберите галочки «Авто» для этих опций. То же самое проделайте для оси Х. Если Вы сейчас будете менять значение параметра в ячейке А2, то будут меняться координаты Луны и соответственно ее положение на диаграмме. Осталось автоматизировать этот процесс. Составим процедуру, в которой параметр t будем менять от 0 до максимального значения. Создайте командную кнопку и в окне кодов VBA под событие Click для этой кнопки наберите код
Private Sub CommandButton1_Click()
For t = 0 To Cells(4, 5) Step 0.1
Cells(2, 1) = t
DoEvents
Next
End Sub Запустите программу, и убедитесь в ее работоспособности. Число оборотов можно менять через ячейку Е2.

Данное упражнение сопровождается файлом «Земля-Луна. xls»

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

В том же файле, на Листе2 Вы можете посмотреть как достаточно просто можно создать (схематическое) изображение секундомера.

А теперь задание - В этом же письме расположен файл dom1.xls в котором показано как точка, начав движение внутри площадки, ограниченной красной рамки прекращает свое движение в тот момент, когда она попадает в домик, обозначенный голубым прямоугольником. Коды этой программы раскрыты.

В файле dompar2.xls это движение выглядит несколько по другому. Но коды закрыты. Ваша задача – написать коды для этой программы. Сроки – до начала весенних каникул.
последний срок – 24 марта 23 час 59 мин

[1] Из-за технических причин строка кода в таблице может быть разбита на несколько. В программном коде это недопустимо, или используют специальные приемы.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4