Задание №1. Проверка значения, введенного в ячейку
Написать программу, которая бы сверяла значение в ячейке (например, в A1) с некоторым наперед заданным (например, со словом «морковка») и выводила сообщение «Верно», если там действительно введено слово «морковка», и сообщение «Неверно» во всех остальных случаях. Для этого: 1. Создайте на листе кнопку 2. В обработчике события Click для кнопки (двойной клик на кнопке в режиме конструктора) написать код типа:
Если свойство «значение» объекта «ячейка("A1")» равно «морковка», то вывести на экран объект «сообщение» с текстом «Верно», иначе вывести на экран объект «сообщение» с текстом «Неверно»
Названия объектов в языке VBA, которые могут понадобиться при написании программы:
Value – значение Cells(X,Y) – ячейка с координатами (X,Y), где X – номер строки, Y – номер столбца Range – диапазон ячеек Msgbox – сообщение
а также служебные слова для обозначения логических конструкций языка:
If { Условие } Then { Действие1 } Else {Действие2 }
Задание №2. Последовательная проверка значений, введенных в ячейки диапазона
Написать программу, которая бы сверяла значения в диапазоне ячеек (например, в A1:А8) с некоторыми наперед заданными (например, с буквами «Б», «Е», «Н», «И», «Л», «Ю», «К», «С») и выводила сообщение «Верно», если в этот диапазон действительно введено слово «БЕНИЛЮКС», и сообщение «Неверно» во всех остальных случаях. Для этого: Создайте кнопку В обработчике события Click для кнопки написать код типа:
Если свойство «значение» объекта «ячейка("A1")» равно «Б», то значение промежуточной переменной (например, переменной SCHET) увеличить на единицу. Если свойство «значение» объекта «ячейка("A2")» равно «Е», то значение переменной SCHET увеличить на единицу. Если свойство «значение» объекта «ячейка("A3")» равно «Н», то значение переменной SCHET увеличить на единицу. …… Если свойство «значение» объекта «ячейка("A8")» равно «С», то значение переменной SCHET увеличить на единицу.
После проверки значений в ячейках нужно проверить значение самой переменной SCHET. Максимальное значение она может принять в том случае, если все буквы введены правильно, и значение это равно восьми. Если значение переменной SCHET равно восьми, то вывести на экран объект«сообщение» с текстом «Верно», иначе вывести на экран объект«сообщение» с текстом «Неверно»
Для выполнения задания потребуется дополнительная промежуточная переменная SCHET, в которой будет накапливаться счет верных ответов. Ее следует объявить в самом начале листинга (перед началом процедуры – перед словами Private Sub …). Эта переменная должна иметь тип «битовая величина». Один из способов объявления переменных:
Массивом в программировании принято называть множество однотипных переменных, имеющих одно общее имя и которые отличаются друг от друга только индексом. Чтобы получить доступ к конкретному элементу массива нужно обратиться к нему по имени массива и указать индекс (порядковый номер) элемента. Например, массив натуральных чисел 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 может быть задан так:
А(11 To 20). Здесь А(1) = 11, А(2) = 12, А(8) = 18 MASSIV(11 To 20). Здесь MASSIV(3) = 13, MASSIV(4) = 14, MASSIV(5) = 15 ЧИСЛА(11 To 20). Здесь ЧИСЛА(7) = 17,ЧИСЛА(9) = 19 и т.п.
Т.о. А, MASSIV и ЧИСЛА – это имена массивов, а числа в скобках – индекс (порядковый номер) элемента.
Массивы могут быть одно- и многомерными. Вышеприведенные примеры массивов являются одномерными. Простейшим примером двухмерного массива можно назвать таблицу Пифагора: элемент ТаблицаПифагора(1,8) находится на пересечении 8-го столбца с первой строкой – это число 8, элемент ТаблицаПифагора(7,6) представляет собой число 42, элемент ТаблицаПифагора(10,3) равен 30 и т.п.
Геометрическое представление трехмерного массива – это куб.
Более трех измерений человеку представить трудно, ибо пространство наше трехмерно и в нашем сознании просто нет аналога, к которому бы смог привязаться наш рассудок, чтобы смоделировать 4-х, 5-и или 10-и-мерный объект. Тем не менее математически здесь нет никаких ограничений. Разумеется на практике программисты редко применяют массивы с количеством измерений более трех, но теоретически можно задавать массивы со сколько угодно большим количеством измерений! 100-мерный, 356-мерный, да хоть миллиономерный массив – все это возможно!
Элементы массивов могут быть числовыми величинами (целыми или дробными числами), текстовыми строками, логическими значениями, датами,значениями времени, элементами типа Variant (универсальная величина) и даже элементами типа Object – Кнопками, Списками, Переключателями или Формами.
1. Перейдите на новый лист 2. Создайте новую кнопку и перейдите в редактор исходного кода 3. Наберите текст процедуры, включая строку объявления новой переменной ДеньНед – одномерного массива размерностью в 7 элементов
Теперь для просмотра результатов работы введите в ячейку А1 число от 1 до 7 и нажмите на вашу кнопку. Если процедура написана верно, в ячейке В1 должен появиться день недели
Задание №4. Модификация программы последовательной проверки значений внутри цикла For… To… Next и с использованием массивов В данной программе перед выполнением каких-либо действий необходимо предварительно объявить и заполнить данными массив, например Y. В первый элемент массива занести букву «Б», во второй – «Е», в третий – «Н» и т.д. до последнего, в который заносится буква – «С»). Далее, проверка значений проводится в цикле, причем в этом цикле сопоставляются значения ячеек со значениями элементов массива Y:
Начало цикла{ For I = 1 To 8 } Если { If } в ячейке с номером I из заданного диапазона (I – счетчик цикла) { Cells(I,1).Value } содержится значение, равное значению элемента массива Y с индексом I { Y(I) }, то { Then } значение переменной SCHET увеличить на единицу { SCHET = SCHET + 1 } Конец цикла { Next I }
После цикла необходимо сравнить саму величину SCHET со значением 8. Если равенство верное { If SCHET = 8 }, то { Then } вывести сообщение «Верно» { MsgBox("Верно") }, иначе { Else } вывести сообщение «Неверно» { MsgBox("Неверно") }
Задание №5. Генератор случайных чисел
Довольно часто при разработке программ требуется наличие некоторого произвольного числа, еще чаще таких чисел требуется несколько. В большинстве языков программирования существует специальная функция генерации случайного числа (например, RANDOMIZE) и VBA здесь не исключение.Генератор случайных чисел в VBA – оператор Rnd. Он выбирает случайное число в пределах от 0 до 1. Чтобы расширить этот диапазон достаточно просто умножить его на нужное число (например, 10):
Rnd * 10
При этом число получится дробное. Для его правильного округления используют функцию Round. Но она достаточно требовательная к быстродействию компьютера. Поэтому в случаях, когда не требуется математически правильное округление старайтесь использовать менее прихотливую функцию Int – отбрасывание дробной части числа. Таким образом для генерации случайного числа X нужно набрать строчку типа:
X = Int(Rnd * 10)
Создадим программу, демонстрирующую работу функции Rnd. Для этого:
1. Создайте новую книгу MS-Excel
2. Создайте на листе кнопку
3. Перейдите в редактор VBA (двойной клик на кнопке в режиме конструктора)
4. В редакторе наберите строчку, которая бы выводила на экран сообщение (объект MsgBox) со случайным числом (выражение для генерации числа в кавычки НЕ БРАТЬ!)
5. Модифицируйте обработчик события Click для кнопки из предыдущего задания таким образом, чтобы на экран выводилось не просто сообщение со сгенерированным числом, а сообщение с текстом, типа:
Случайное число: { X }
Для того, чтобы создать текстовую строку, состоящую из разнородных составляющих (Текстовая строка "Случайное число: " и сгенерированная числовая переменная), нужно использовать специальные символы сцепления – «амперсанды» («&») – или обычные плюсы (символы «+»), но в этом случае нужно быть осторожным: для сложения чисел также используется плюс!
И еще. Специальный объект Chr позволяет ввести в текстовую строку непечатаемые служебные символы. В частности «Chr(10)» – символ разрыва строки с переходом текста на новую. Т.о. строка кода примет вид:
Присоедините к этой строке служебный символ перехода на новую строку, а уже к нему – строку «Еще?». После этого скобку можно закрыть.
Объект MsgBox может прорисовывать на экране разные окна. Например, можно вывести на экран какое-то сообщение и спросить пользователя, что делать дальше (не одна кнопка «Ok», а две («Да» и «Нет»), три («Да», «Нет» и «Отмена») и т.п.). В таком виде этот объект применяется только внутри условного оператора If, в котором проверяется, какая кнопка из указанных нажата и что в этом случае делать.
Объект MsgBox в общем случае имеет следующие параметры: Prompt – Текст сообщения, выводимого в окне Buttons – Набор кнопок в окне. Может принимать значения:
vbOKOnly – только кнопка Ok (по умолчанию)
vbYesNo – кнопки «Да» и «Нет»
vbYesNoCancel – кнопки «Да», «Нет» и «Отмена»
vbAbortRetryIgnore – кнопки «Прервать», «Повторить» и «Пропустить»
другие наборы (более десятка)
Title – Заголовок окна HelpFile – Файл справки (или раздел справочной системы)
Результатом нажатия на ту или иную кнопку в окне MsgBox является особый объект VbMsgBoxResult, который может принимать значения:
vbAbort – если нажата кнопка «Прервать»
vbCancel – если нажата кнопка «Отмена»
vbIgnore – если нажата кнопка «Игнорировать ошибку» или «Пропустить»
vbNo – если нажата кнопка «Нет»
vbOk – если нажата кнопка «Ok»
vbRetry – если нажата кнопка «Повторить»
vbYes – если нажата кнопка «Да»
Таким образом объект MsgBox позволяет не просто выводить на экран текстовые сообщения, но и направлять выполнением программы по тому или иному направлению, в зависимости от того, какую кнопку нажал пользователь.
Модифицируйте обработчик события Click для кнопки из предыдущего задания таким образом, чтобы на экран выводилось не просто сообщение, типа:
"Случайное число: { X } Еще?"
с одной кнопкой «Ok» и стандартным заголовком «Microsoft Excel», а, во-первых, внизу должны быть две кнопки: «Да» и «Нет», во-вторых, окно с сообщением должно иметь в заголовке слово «Генератор», а в-третьих (и в-главных!) при нажатии на кнопку «Да» программа должна выполниться вновь (появиться новое число), а при нажатии на кнопку нет окно должно просто закрыться.
Первый параметр объекта MsgBox – Prompt (текст сообщения) –уже готов. Вместо закрывающей скобки поставьте запятую.
Второй параметр – Buttons – определяет набор кнопок в окне. Нам нужны две кнопки – «Да» и «Нет», значит вместо параметра Buttons ставим значение vbYesNo,после чего опять ставим запятую.
Третий параметр – Title – отвечает за заголовок окна. Это должно быть слово «Генератор». Так и введите это слово в кавычках, после чего нужно скобку закрыть.
При нажатии на кнопку в таком окне объект MsgBox принимает значения vbYes или vbNo. Т.е. достаточно проверить, чему будет равен объект MsgBox при помощи конструкции If { Условие } Then { Действие1 } Else {Действие2 } (в данном случае нужно использовать сокращенную форму If { Условие } Then { Действие }) и прописать действие, выполняемое при этом. Дописываем оператор If в начале, в конце – знак равенства «=» и слово vbYes, потом слово Then, потом...
Что же потом?Какое действие наша программа должна выполнять, если пользователь нажмет кнопку на кнопку «Да»? Вернуться к началу строки и выполнить это действие еще раз. Это можно сделать, набрав в конце слово GoTo (перейти) и указать куда.GoTo – это оператор перехода на какую-то конкретную строчку кода, помеченную особой меткой. Метки в процедурах определяются символом «:» – двоеточие – после имени метки (любого слова, например, слово «Начало»). А для того, чтобы перейти к этой метке нужно просто указать ее имя после оператора GoTo.
Теперь нужно определить место метки, куда должна перейти программа. Да в самом начале процедуры, перед уже готовой строкой кода
Задание №7. Объект UserForm (Форма). «Рулетка»
1. Создайте новую книгу MS-Excel
2. Создайте на листе кнопку
3. Перейдите в редактор VBA (двойной клик на кнопке в режиме конструктора)
4. Добавьте в свой проект объект UserForm (Insert -> UserForm)
ВНИМАНИЕ!
Не закрывайте появившееся дополнительное маленькое окно Toolbox! Если оно вам мешает – просто отодвиньте его в сторону. Если же вы все-таки его закрыли, отобразить это окно вновь можно через меню Viev -> Toolbox
5. Найдите в окне Toolbox кнопку Image и бросьте этот объект на вашу форму. Растяните границы объекта Image1 по размеру вашей формы
6. Не снимая выделения с объекта Image1перейдите в окно Properties (если это окно не отображено, зайдите вменю Viev -> Properties Window, или просто нажмите клавишу F4). Обратите внимание на заголовок этого окна: там ОБЯЗАТЕЛЬНО должно быть написано «Properties – Image1»! Если заголовок окна нетакой (например, «Properties – UserForm1»), в этом случае нужно из выпадающего списка, расположенного ниже заголовка этого окна, выбрать строчку «Image1 Image» 7. Измените свойство Picture (кнопкой «...»). В появившемся диалоге выберите файл нужного рисунка.
Для получения адреса этого рисунка сделайте на нем клик
8. Измените свойство Visible (по умолчанию оно установлено в положение «True»). Это свойство отвечает за видимость объекта. В нашем случае объект изначально должен быть невидимым
9. Набросайте на форму элементы управления и расположите их так, как это показано на рисунке: три объекта TextBox – текстовые поля – и два объекта CommandButton – кнопки
Измените свойство Caption объекта UserForm1 (отвечает за заголовок формы), а также свойство Font (Шрифт) объектов CommandButton и TextBox. Это можно сделать одновременно, если последовательно выделять эти объекты при нажатой клавише Ctrl. Также следует изменить свойство TextAlign элементов TextBox (выбрать из списка «2 – fmTextAlignCenter») – оно отвечает за выравнивание текста.
10. Для кнопки «Выход» задать событие: «End». Это значит, что при нажатии на эту кнопку завершается выполнение всех процедур в данном файле.11. Не снимая выделения с кнопки в окне Properties найдите свойство «Cancel» и установите его в положение «True». Тем самым для этой кнопки задается горячая клавиша выхода из программы: форма закроется при нажатии клавиши «Esc». И вообще, если для какой-то кнопки на форме свойство Cancel установлено в положение True, то по нажатию клавиши «Esc» запускается событие, назначенное для этой кнопки
12. Для кнопки «Вращать» нужно задать событие, которое бы:
Выбирало случайное число от 1 до 10 и заносило его в тестовое поле (эту операцию нужно проделать трижды, т.к. текстовых полей на форме - три).
Проверяло совпадение чисел в двух полях из трех, и при совпадении:
делало видимым объект Image1
выводило на экран сообщение о совпадении (например: «Вы выиграли! Желаете повторить?»)
при выборе кнопки «Да» вновь делало объект Image1 невидимым и запускало операцию выбора чисел вновь, в противном случае закрывало форму
Как это реализовать? На самом деле все не так сложно.
Свойству «Значение» { Value } объекта TextBox1 присвоить целую часть{ Int } от произведения генератора случайных чисел на 10 { Rnd * 10 }
Таких строчек нужно три: для объектов TextBox1, TextBox2 и TextBox3. После генерации нужно проверить, не совпали ли две цифры:
Если свойство «Значение» { Value } объекта TextBox1 равно свойству «Значение» { Value } объекта TextBox2 или { Or } свойство «Значение» { Value } объекта TextBox1 равно свойству «Значение» { Value } объекта TextBox3 или { Or } свойство «Значение» { Value } объекта TextBox2 равно свойству «Значение» { Value } объекта TextBox3 то { Then }...
Длинное получилось условие. Теперь разберем что же делать, если такое длинное условие окажется верным. В целом код процедуры будет выглядеть так:
Строчку: можно перевести на «человеческий» язык так:
Если в окне «Ура! Вы выиграли! Желаете попробовать еще?» с заголовком «Есть совпадение» и с набором кнопок «Да/Нет» нажата кнопка «Нет», тогда завершить программу
И последнее. Процедура завершается строкой GoTo Начало.
13. Осталось вывести нашу форму на экран. Для этого нужно вернуться на лист, с которого происходит вызов формы (там должна быть кнопка), еще раз сделать двойной клик на этой кнопке, чтобы попасть в редактор кода этой кнопки, и написать процедуру обработки события Click для этой кнопки:
UserForm1.Show
где UserForm1 – имя объекта (объект форма), а Show – метод, которым нужно воздействовать на форму, чтобы она отобразилась на экране.