Статистика
Просмотры материалов : 155124Кроссворд. Макросы. Рекурсия |
Автор: Александр Хохлов |
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. |