Кроссворд. Макросы. Рекурсия
Автор: Александр Хохлов   
09.01.2011 17:48

Совершенствуем кроссворд на основе макросов. Автоматическая проверка правильности без участия пользователя. Статья логически продолжает Кроссворд. Макросы.

Постановка задачи.

Нужно сделать так, чтобы пользователь больше не управлял процессом проверки правильности слов. Избавляемся от кнопки и учим кроссворд проверять автоматически через заданный промежуток времени.

Действие 1. Функция RepeatProc(). Метод Application.OnTime

Открываем редактор кода Разработчик -> VisualBasic и в Module1 добавляем новую процедуру.

Public Sub RepeatProc()
  Dim TimeDelay As Date
  'задержка по времени 1 сек
  TimeDelay = TimeValue("00:00:01")
  'вызов процедуры CheckAnswers
  Application.OnTime Now + TimeDelay, "CheckAnswers"
End Sub

Процедура вызывает CheckAnswers() - будет проверять правильность ответов с задержкой в 1 секунду. Дальше, вносим правки в исходный код функции CheckAnswers().

Public Sub CheckAnswers()
 Dim myAnswer As String
 myAnswer = "1эпидемия2заражение3руткит4интернет5троянская" & _
            "6антивирус7лечение8программа9удаление10сканер"
 If GlueTogether("E3:R12") = myAnswer Then
  'все верно
  Range("G14").Value = "МОЛОДЕЦ!"
 Else
  'допущены ошибки
  Range("G14").Value = "ДУМАЙ ЕЩЕ!"
 End If
 'вызов функции RepeatProc
 RepeatProc
End Sub

Во-первых, избавляемся от логической функции, которая применялась в статье Кроссворд. Макросы и фразы «Молодец!» или «Думай еще!» пишем макросом в ячейку G14. Во-вторых, обращаемся к RepeatProc, чтобы осуществить рекурсивный вызов.

Действие 2. Событие Workbook.Open

Осталось запустить связку двух процедур на выполнение. Для этого повесим первоначальный запуск CheckAnswers на событие Workbook.Open. Это событие происходит при открытии книги Excel.

Открываем редактор кода, выполняем двойной клик мышью по ЭтаКнига

В окне для редактирования кода вставляем процедуру:

Private Sub Workbook_Open()
 RepeatProc
End Sub

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

 

Добавить комментарий

Защитный код
Обновить