К элементам формы привяжем макросы (все привязываемые макросы входят в состав кода, который приведен выше, и доступны в окне выбора макросов):
• переключатель Сетка присутствует– макрос DisplayGrid;
• переключатель Сетка на поле отсутствует – макрос HideGrid;
• кнопка Новый кроссворд – макрос Clear;
• кнопка Нарисовать рамку – макрос DrawCrasswordGrid;
• кнопка Стереть рамку – макрос ClearGrid;
• кнопка Дальше – макрос ToNumber.
Теперь аналогичным образом (с помощью вкладки Разработчик) создадим еще одну форму, которая показана на рис. 5.2.
К элементам данной формы привяжем следующие макросы (они также присутствуют в коде и доступны в окне выбора макросов):
• кнопка Автонумерация – макрос AutoNumber;
• кнопка Очистить все – макрос Clear;
• кнопка Вывести на печать – макрос ToPrint.
Следует отметить, что можно не создавать пользовательские формы, а размещать все элементы управления прямо на рабочем листе. Если так поступить, то кнопка Далее в первой (главной) форме становится ненужной.
Рис. 5.2. Вторая форма программы
Итак, у нас все готово для составления кроссвордов. О порядке использования программы рассказывается в следующем подразделе.
Порядок использования программы
С помощью созданной программы можно быстро составлять и нумеровать сетку кроссворда. Рассмотрим конкретный пример.
На листе создадим несколько выделенных областей, соединив их между собой (рис. 5.3).
Рис. 5.3. Выделение нескольких областей
Теперь нажмем кнопку Нарисовать рамку – результат представлен на рис. 5.4.
Рис. 5.4. Рамка кроссворда
Нажимаем кнопку Дальше – будет отображена вторая форма программы (см. рис. 5.2). В этой форме следует нажать кнопку Автонумерация – в результате сетка кроссворда будет быстро пронумерована (рис. 5.5).
Теперь нажимаем кнопку Вывести на печать – и на листе отобразится готовая сетка кроссворда (рис. 5.6).
С помощью кнопки Очистить все с листа удаляется рамка кроссворда.
Рис. 5.5. Нумерация сетки кроссворда
Кнопка Стереть рамку, которая находится на главной форме, позволяет удалить всю рамку (для этого ее нужно выделить) либо ее выделенный фрагмент.
При нажатии кнопки Новый кроссворд удаляется все содержимое документа, после чего можно приступать к составлению нового кроссворда.
Рис. 5.6. Готовая сетка кроссворда
Пользователям Windows известно, что в комплект поставки операционной системы входит несколько игр, в том числе Сапер. Однако не многие знают, что подобную игру можно создать самостоятельно в Excel, используя механизм макросов.
Игра «Минное поле», о которой рассказывается в данном разделе, во многом аналогична стандартной игре Сапер. Для создания игры необходимо написать несколько макросов, объединенных в два кода: первый код должен быть помещен в модуль того рабочего листа, на котором предполагается разместить игру, а второй – в стандартный модуль.
В модуль рабочего листа необходимо поместить такой код (листинг 5.2).
Листинг 5.2. Код в модуле рабочего листа
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim intCol As Integer, intRow As Integer
Dim intMinesAround As Integer
Dim fInGameField As Boolean
' Определим, попадает ли в игровое поле выделенная ячейка
fInGameField = (Target.Row >= 2) And (Target.Row <= 7) _
And (Target.Column >= 2) And (Target.Column <= 7)
' Обрабатываем выделение ячейки
If Target.Value = "*" And fInGameField Then
' Пользователь выделил ячейку с миной – покажем мину
Target.Font.Color = RGB(0, 0, 0)
Target.Interior.Color = RGB(255, 0, 0)
' Пользователь проиграл!
EndGame
ElseIf fInGameField Then
' Пользователь выделил пустую ячейку. Оформим эту ячейку
Target.Interior.Color = RGB(0, 0, 255)
Target.Font.Color = RGB(0, 255, 0)
Target.Font.Size = 16
' Подсчитаем количество мин рядом с ячейкой (вокруг ячейки)
For intCol = Target.Column – 1 To Target.Column + 1
For intRow = Target.Row – 1 To Target.Row + 1
If Target.Worksheet.Cells(intRow, intCol).Value =
"*" _
Then
' Нашли очередную мину
intMinesAround = intMinesAround + 1
Читать дальше
Конец ознакомительного отрывка
Купить книгу