Разработка приложения «Гадание по книгам» Word, VBA
Создадим приложение для гадания и используем один из методов – гадание по книгам. Нам понадобится только программа MS Word.Суть программы – вы задаете вопрос (вслух или про себя), нажимаете кнопку и получаете ответ.
Вообще, можно самому составить список ответов, как в программе «Магический шар» или «Шар судьбы». Тогда вы будете получать прямые ответы на свой вопрос.
А можно использовать в качестве базы ответов какое-нибудь произведение или сборник произведений. Тогда ответы станут более таинственными и интересными, их нужно будет интерпретировать., что повысит интересность.
Идея такая, как вот в этом приложении для Android – «Гадание по книгам Пушкина».
Как уже говорилось, можно использовать любую книгу, для ответа будут выбираться целые абзацы. Но лучше (на мой взгляд) выбрать сборник стихов. В примере я использую роман Пушкина «Евгений Онегин». Найдите текстовый документ с нужным произведением, отредактируйте его, если нужно.
Открываем редактор Visual Basic, нажав Alt+F11 или через меню Разработчик->Visual Basic. В редакторе переходим в меню Insert->User Form. Появляется новая форма. Отредактируйте ее, установите размеры, на свой вкус. Я изменил название на frmMain, поставил в качестве фона картинку (свойство Picture). Свойство Caption меняет заголовок формы. Можно также изменить свойство ShowModal, по умолчанию оно равно True, то есть форма загружается модально, и пока ее не закроешь, в Word не поработать.
Добавим на форму надпись, поясняющую, что нужно сделать (задать вопрос и нажать кнопку), кнопку выхода (btnExit), кнопку запроса ответа (btnAnswer) и кнопку, закрывающую саму форму, (btnClose), а также текстовое поле для ответа (tbAnswer). Поле сделаем прозрачным (свойство BackStyle = 0, то есть Transparent), установим вертикальный скролбар – ScrollBars = 2, настроим шрифт, выравнивание и т.п.
Получается такая форма:
Нажав на нужную кнопку, попадаем в редактор кода, в котором уже создана процедура клика по этой кнопке. Остается только дописать текст.
Кнопка выхода из приложения (закрывает Word совсем):
Private Sub btnExit_Click()Кнопка, закрывающая форму:
Application.Quit
End Sub
Private Sub btnClose_Click()Кнопка для получения ответа:
Unload Me
End Sub
Private Sub btnAnswer_Click()Переменные:
Dim cntPar As Integer, numPar As Integer
Dim answer As String
Randomize
cntPar = ActiveDocument.Paragraphs.Count
numPar = Int(Rnd * cntPar + 1)
Do
answer = ActiveDocument.Paragraphs(numPar).Range.Text
Loop While Len(Trim(answer)) = 0
tbAnswer.Text = answer
End Sub
cntPar – число абзацев в тексте;
numPar – номер случайного абзаца для ответа;
answer – сам ответ (текст параграфа - абзаца).
Для выбора нужного номера абзаца используем функцию случайного выбора Rnd. Перед ее использованием проводим рандомизацию, чтобы функция Rnd не выдавала один и тот же порядок чисел.
Выражение ActiveDocument.Paragraphs.Count обозначает количество абзацев в документе.
Как использовать функцию Rnd. Чтобы получить случайное число Number из диапазона min – max включительно, нужно писать выражение:
Number = Int((max-min+1)*Rnd+min)
У нас min = 1, а max = cntPar.
Затем используем цикл с постусловием Do … Loop While … Он будет повторяться до тех пор, пока длина текста абзаца не станет больше 0. Текст получаем с помощью свойства абзаца Range.Text.
Затем этот текст выводим в текстовое поле.
Чтобы форма открывалась вместе с открытием документа, нужно установить обработку события Open для этого документа:
Private Sub Document_Open()Результат:
frmMain.Show
End Sub
Получилась совсем несложная программа, но зато ее можно использовать там, где другие программы могут быть запрещены, например, на рабочем месте (если у вас нет устройства на андроиде).
И еще, если вы одновременно работаете с другими документами, то есть возможность погадать на какой-нибудь записке к отчету, например, потому что программа использует активный документ. Поэтому при гадании активным должен документ с текстом книги.
