4. Перейдите в редактор VBA и раскройте, если его нет, окно проектов. Выделите в этом окне строку VBAproject (Книга1). Это книга, в которой Вы работаете.
5. В меню выберите команду Insert/UserForm.
6. После этих действий на экране появится окно с панелью серого цвета, покрытой точечной сеткой. Это и есть пользовательская форма.
7. Через меню View/ToolBox вызовите панель элементов управления, связанную с пользовательской формой
8. Щелчком мыши выделите пользовательскую форму
9. Расположите на этой форме элемент управления Кнопка (CommandButton) и два текстовых окна (TextBox)
10. Откройте окно свойств и если элемент Кнопка выделен, то Вы в этом окне увидите свойства этого элемента.
11. Измените у этого элемента свойство Caption, так чтобы на поверхности кнопки было видно слово «Приветствие»
12. Сделайте двойной щелчок по кнопке и откроется окно кодов для пользовательской формы (ее модуль), в которой будут заготовлены строчки для написания процедуры по щелчок по кнопке
Private Sub CommandButton1_Click()
End Sub
13. Теперь будем вписывать код. Сначала объявляем переменную а как строковую
Dim a As String
Не забывайте следить за типом шрифта. Код пишется латинскими буквами
14. Следующие команды копируют содержимое ячеек из Листа 2 и Листа 3. в текстовые окна
TextBox1.Text = Worksheets(2).Cells(3, 2)
TextBox2.Text = Worksheets(3).Cells(3, 4)
15. Затем вызовем функцию InputBox. Эта функция предлагает пользователю ввести данные (фразы, слова), которые мы запомним в строковой переменной а. Код должен быть таким
a = InputBox("Как Вас зовут", "Знакомство")
«Как Вас зовут» – это сообщение для пользователя
«Знакомство» – это заголовок окна
Пользователь введет свое имя, и оно сохранится в строковой переменной а
16. Теперь вызываем функцию MsgBox, которая просто выводит сообщения, но в сообщение вставим слово «Привет» и имя пользователя
x = MsgBox("Привет " & a)
17. Имя, которое ввел пользователь, отправим в ячейки, где у нас были введены цифры.
Worksheets(2).Cells(3, 2) = a
Worksheets(3).Cells(3, 4) = a
18. Общий вид кода
Private Sub CommandButton1_Click()
Dim a As String
TextBox1.Text = Worksheets(2).Cells(3, 2)
TextBox2.Text = Worksheets(3).Cells(3, 4)
a = InputBox("Как Вас зовут", "Знакомство")
x = MsgBox("Привет " & a)
Worksheets(2).Cells(3, 2) = a
Worksheets(3).Cells(3, 4) = a
End Sub
19. Следующая задача вывести форму вместе с кнопкой на рабочий лист. (Лист1). Для этого в окне проекта выделяем двойным щелчком строку Лист1(Лист1), и раскрывается окно кодов для этого листа.
20. В верхней строке слева из списка выбираем слово Worksheet (скорее всего, оно там и будет), а справа слово Activate. Тогда редактор предложит написать процедуру под событие «Лист1 стал активным». Вы увидите в окне строки
Private Sub Worksheet_Activate()
End Sub
21. В этой процедуре сделаем так, чтобы пользовательская форма стала видна когда мы откроем Лист1. Полный вид процедуры
Private Sub Worksheet_Activate()
UserForm1.Show
End Sub
22. Программа составлена. Теперь перейдите в рабочую книгу (Лист1), потом откройте литс2 и затем опять откройте (сделайте активным) лист 1. Должна появиться форма. Щелкните по кнопке и выполните «требования программы. Когда Вы «познакомитесь», проверьте – в ячейках на 2 и 3 листах вместо цифр должен быть текст, введенный при знакомстве.
Данное упражнение иллюстрируется файлом «Ввод-Вывод. xls”
Быстрое построение графика.
Те, кто достаточно хорошо освоил Excel, наверняка представляют себе как можно построить график какой-нибудь функции, где У зависит от Х. Для этого нужно заполнить два столбика – в первом столбике определенное количество значений Х, а во втором – рассчитанные по формуле функции соответствующие значения У. Затем эти два столбика выделяются и с помощью мастера диаграмм строится точечный график. В этом процессе есть одна малоприятная деталь – набор формулы. Вообще, в большинстве языков программирования пользователь созданной программы не может изменять расчетную формулу. Как правило, программирование такой возможности – сложный процесс. Мы расскажем, как просто это можно сделать с помощью VBA.
Сначала об идее – допустим все значения Х, которые нам нужны для построения графика находятся в ячейках А4:А104. Рассчитанные значения У должны располагаться в диапазоне В4:В104. Для оформления расчетов нам в этот диапазон нужно ввести формулу. Для определенности выберем формулу У=Х^2+X-5. Тогда в ячейке В4 формула будет имеет вид «=А4^2+A4-5”. Затем, с помощью протаскивания эта формула распространяется на все ячейки диапазона и можно строить график. Но оказывается, что если в объект Range программно вводить формулу, то эта формула будет видоизменена в соответствии с расположением ячеек относительно друг друга. Другими словами, мы пишем формулу только для первой ячейки, а программа сама ее переделает для остальных. Мало того, мы для удобства пользователя можем создать текстовое окно, куда он будет вводить формулу в естественном виде, а дело программы – превратить ее в расчетную.
Познакомиться с работой этой программы можно в файле «Графики. xls”. Код программы с объяснениями предлагается ниже.
Private Sub CommandButton1_Click() | |
Dim a As String, b As String, ñ As String, z As Integer[1] | Объявление трех строковых и одной целочисленной переменных |
a = TextBox1.Text | В переменную а копируем содержимое текстового окна, то есть формулу. |
If Not a = "" Then | В дальнейшем процедура будет работать, если строка а не пустая. |
c = "=" | В строковой переменной с начинаем формировать расчетную формулу, которая начинается со знака «равно» |
z = Len(a) | Определяем число символов в формуле. Для этого используем встроенную функцию VBA- Len() |
For k = 1 To z | Начинаем цикл, в котором анализируем каждый символ. |
b = Mid(a, k, 1) | Для этого по очереди вырезаем из формулы по символу (используем функцию VBA – mid()), помещаем его в переменную b |
If b = "x" Or b = "X" Then b = "a4" | И если этим символом является х или Х, то заменяем его на А4 |
c = c + b | В переменную с добавляем очередной символ, но теперь вместо х там будет А4 |
Next k | Конец конструкции For…Next |
End If | Конец конструкции If…EndIf |
Worksheets("Graf").Range("b4:b104") = c | Расчетную формулу вводим в диапазон “b4:b104” |
End Sub |
Выделяем ячейку…и получаем массу возможностей
Основная задача этого примера – показать, какие еще возможности VBA можно использовать при вызове процедур через событие. Среди событий рабочего листа обратим внимание на событие SelectionChange, которое запускает процедуру с именем
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
При работе этой процедуры используется переменная с именем Target, а тип этой переменной – Range, то есть диапазон выделенных ячеек. Это означает, что данная процедура в качестве переменной запоминает выделенные ячейки, и открывается возможность программно их обрабатывать. Это представляется удобным в тех случаях, когда в электронной таблице различные данные трудно собрать для обзора в одной зрительной зоне. Как правило, это различные каталоги, подробные списки сотрудников, оборудования и т. д. Было бы неплохо, если бы при выборе какой-нибудь строки появилась возможность увидеть всю строку в компактном виде, и, если есть необходимость, обработать ее. Рассмотрим пример, в котором необходимо отредактировать вопросы теста. (Файл «Вывод в форму»). Так получилось, что в исходном файле вопросы теста, справочная информация и заголовок темы повторяются, в то время как ответы на вопросы расположены в четырех строках, следующих друг за другом. При написании процедуры была поставлена цель - собрать в одном месте заголовок темы, вопрос, 4 ответа, и отметку «+» около правильного ответа. Прежде чем рассматривать коды примера, отметим, что заголовок темы располагается в 1-м столбце, вопрос – в 3-м, справочный материал – в 4-м, ответы – в 5-м, и отметка «+» - в 6-м столбцах. Кроме того каждый новый вопрос начинается в 1-й, 5-й, 9-й и т. д. строке. Для наглядности эти строки выделены желтым цветом. Необходимо, чтобы при щелчке пользователя по любой ячейке из этих строк необходимая информация по его желанию выводилась бы в компактном виде. В этом случае целесообразно применить очень эффективный элемент управления UserForm (Пользовательская форма), на которой, в свою очередь размещались элементы управления Надпись (Label) и Кнопка (CommandButton). Вставляется пользовательская форма в проект через команды меню среды VBA
Insert/UserForm. При этом появляется дополнительный модуль, в котором размещаются процедуры, связанные с событиями самой формы и элементов управления, находящихся на ней.
Познакомимся с кодами
Private Sub Worksheet_SelectionChange(ByVal Target As Range) | |
If Target. Count = 1 Then | Процедура сработает, если будет выделена только одна ячейка |
x = Target. Row | В переменной х запомним номер строки, в которой выделена ячейка |
If x Mod 4 = 1 Then | Процедура сработает, если х будет равен 1, 5, 9, 13 и т. д. |
Cells(1, 8) = x | Значение х копируется в ячейку H8/ |
a$ = Str(x) | И передается в строковую переменную |
otvet = MsgBox(a$, 1) | Используется функция MsgBox |
If otvet = 1 Then | Если пользователь «дает согласие», то выполняется ряд следующих действий. |
b$ = Cells(x, 3) | Текст вопроса запоминается в строковой переменной b$ |
UserForm1.Label1.Caption = Cells(x, 1) | В различные элементы управления, расположенные на форме копируется содержимое ячеек рабочего листа, имеющих отношение к выбранному вопросу. |
UserForm1.Label2.Caption = b$ | |
UserForm1.Label3.Caption = Cells(x, 4) | |
UserForm1.Label4.Caption = Cells(x, 5) | |
UserForm1.Label5.Caption = Cells(x+1, 5) | |
UserForm1.Label6.Caption = Cells(x+2, 5) | |
UserForm1.Label7.Caption = Cells(x+3, 5) | |
UserForm1.Label8.Caption = Cells(x, 6) | |
UserForm1.Label9.Caption = Cells(x1, 6) | |
UserForm1.Label10.Caption = Cells(x+2,6) | |
UserForm1.Label11.Caption = Cells(x+3,6) | |
UserForm1.Show | Форма становится видимой |
End If | Закрываются конструкции If…EndIf |
End If | |
End If | |
End Sub |
Сделаем пояснения к некоторым строчкам кода.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |


