- •1.Введение в программирование на vba Понятие объекта
- •Среда программирования
- •Типы данных
- •Переменные
- •Стандартные элементы управления. Объект Форма(UserForm) и элемент Кнопка(CommandButton)
- •Элемент Кнопка
- •Стандартные окна ввода и вывода сообщений
- •Окно сообщения
- •Окно ввода
- •Практические задания Задание 1.1
- •Задание 1.2
- •Задание 1.3
- •Задание 1.4
- •2.Реализация линейных алгоритмов Программирование арифметических выражений
- •Математические операции
- •Стандартные математические функции
- •Элементы Надпись(Label) и Поле(TextBox) Элемент Поле
- •Элемент Надпись
- •Практические задания Задание 2.1
- •Задание 2.2
- •Задание 2.3
- •3.Реализация алгоритмов с условиями Программирование условий Операторы сравнения
- •Логические операции
- •Инструкция If…Then…Else
- •Инструкция Select Case
- •Функции, используемые при программировании условий
- •Элементы Рисунок(Image), Счетчик и Полоса прокрутки(ScrollBar) Элемент Рисунок
- •Элемент Счетчик
- •Элемент Полоса прокрутки
- •Практические задания Задание 3.1
- •Задание 3.2
- •З адание 3.3
- •4.Реализация циклических алгоритмов Программирование циклов Цикл For…Next
- •Цикл Do While…Loop / Do…Loop While
- •Цикл Do Until...Loop / Do…Loop Until
- •Практические задания Задание 4.1
- •Задание 4.2
- •5.Использование процедур и функций в программах на vba Процедуры и функции
- •Элементы Рамка(Frame), Флажок(CheckBox), Переключатель(OptionButton), Выключатель(ToggleButton) Элемент Рамка
- •Элемент Флажок
- •Элемент Выключатель
- •Элемент Переключатель
- •Практические задания Задание 5.1
- •6.Использование структурированных типов данных на примере массивов Понятие массива. Работа с массивами
- •Практические задания Задание 6.1
- •Практические задания Задание 7.1
- •Задание 7.2
- •Задание 7.3
- •Задание 7.4
- •Задание 7.5
- •Задание 7.6
- •Задание 7.7
- •Задание 7.8
- •8.Работа с макросами в ms Excel Основные объекты ms Excel
- •Понятие макроса. Создание, редактирование, выполнение макросов
- •Цикл For Each
- •Инструкция With
- •Практические задания Задание 8.1
- •Задание 8.2
- •Задание 8.3
- •9.Создание приложений, управляемых с помощью диалоговых окон Элементы Поле со списком (ComboBox), Список (ListBox)
- •Практические задания Задание 9.1
- •Задание 9.2
- •10.Рекомендуемая литература
Цикл For Each
Эта специфическая форма цикла For предназначена для выполнения некоторой операции с каждым объектом, входящим в состав коллекции объектов (такой операцией, например, может быть вызов метода или присваивание значения свойству). Это дает возможность выполнять массовые манипуляции с объектами так же, как это делается с массивами переменных. Синтаксис этой разновидности цикла For:
For Each Элемент In ИмяКоллекции
Инструкции
Next [Элемент]
Здесь Элемент – имя переменной цикла. Переменная может иметь тип Variant, Object или тип конкретного объекта. Для досрочного выхода из цикла используется инструкция Exit For.
Инструкция With
Инструкция позволяет выполнить последовательность действий над указанным объектом, не повторяя имени объекта. Ссылка на свойства и методы этого объекта внутри инструкции With начинается с точки. Эта инструкция очень часто используется при записи макросов. Синтаксис инструкции: With Объект
[Инструкции]
End With
Практические задания Задание 8.1
Запишите макрос, который выполняет следующие действия:
Добавить новый лист.
Переименовать лист, дав ему имя «Таблица».
В ячейку A1 ввести заголовок таблицы «Ведомость».
Выделить диапазон ячеек A1:C1, отформатировать заголовок (курсив, размер – 14, выравнивание – по центру выделения).
Во второй строке ввести заголовки столбцов «Фамилия», «Оклад», «Премия».
В ячейку C3 ввести формулу «=B3*0,25».
Вы должны получить таблицу приведенную ниже:
Проанализируйте текст макроса. Задайте комбинацию клавиш для вызова макроса. Попытайтесь изменить макрос так, чтобы лист всегда добавлялся после последнего существующего листа, и имя нового листа вводилось с клавиатуры. Ниже приведен отредактированный текст макроса, который решает эту задачу.
Sub СозданиеТаблицы()
Sheets.Add after:=Worksheets(Worksheets.Count)
Sheets(Worksheets.Count).Name = InputBox("Введите имя листа")
Sheets(Worksheets.Count).Activate
ActiveCell.Value = "Ведомость"
Range("A1:C1").Select
Selection.Font.Italic = True
Selection.Font.Size = 14
Selection.HorizontalAlignment = xlCenterAcrossSelection
Range("A2:C2").Value = Array("Фамилия", "Оклад", "Премия")
Range("C3").FormulaR1C1 = "=RC[-1]*0.25"
Range("A3").Select
End Sub
Семейство Sheets содержит все листы рабочей книги. Метод Add используется для создания нового листа. Свойство Count позволяет узнать количество объектов в семействе. Метод Activate делает указанный объект активным. Метод Select выделяет указанный объект. Selection – это свойство объекта Application, которое содержит выделенный в данный момент объект.
Задание 8.2
Создайте форму, приведенную ниже. При выводе окна в текстовом поле показывается содержимое текущей ячейки рабочего листа. Кнопка «Записать на лист» предназначена для записи содержимого текстового поля в текущую ячейку.
Для вывода окна на экран напишите в модуле с макросами следующий макрос:
Public Sub Редактирование()
UserForm1.TextBox1.Text = CStr(ActiveCell.Value)
UserForm1.Show
End Sub
Для вызова макроса используйте кнопку новой панели инструментов и комбинацию клавиш. Испробуйте различные варианты оформления кнопки, создайте свой рисунок.
Ниже приведена процедура для кнопки «Записать на лист»:
Private Sub CommandButton1_Click()
If IsNumeric(TextBox1.Text) Then
ActiveCell.Value = CDbl(TextBox1.Text)
ElseIf IsDate(TextBox1.Text) Then
ActiveCell.Value = CDate(TextBox1.Text)
Else
ActiveCell.Value = CStr(TextBox1.Text)
End If
End Sub
Обратите внимание, что в приведенных выше процедурах используются функции преобразования типов. Они необходимы для чисел и дат, чтобы распознавалась национальная настройка.
Для редактирования содержимого текущей ячейки очень удобно также использовать свойство ControlSource элемента Поле (это свойство есть и у некоторых других элементов). Значением свойства является адрес ячейки, с которой у элемента устанавливается связь. В этом случае при изменении содержимого ячейки значение элемента изменяется автоматически, и наоборот. В качестве примера создайте форму, содержащую текстовое поле:
При выводе формы на экран нужно выполнить команду:
TextBox1.ControlSource = ActiveCell.Address
Проверьте работу программы, вызывая форму для ячеек с данными различного типа и внося в них изменения.