Excel. Трюки и эффекты | страница 161




Теперь нажмем кнопку Нарисовать рамку – результат представлен на рис. 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 =