Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_VBA_1.doc
Скачиваний:
10
Добавлен:
03.05.2019
Размер:
1.01 Mб
Скачать

Цикл For Each

Эта специфическая форма цикла For предназначена для выполнения некоторой операции с каждым объектом, входящим в состав коллекции объектов (такой операцией, например, может быть вызов метода или присваивание значения свойству). Это дает возможность выполнять массовые манипуляции с объектами так же, как это делается с массивами переменных. Синтаксис этой разновидности цикла For:

For Each Элемент In ИмяКоллекции

Инструкции

Next [Элемент]

Здесь Элемент – имя переменной цикла. Переменная может иметь тип Variant, Object или тип конкретного объекта. Для досрочного выхода из цикла используется инструкция Exit For.

Инструкция With

Инструкция позволяет выполнить последовательность действий над указанным объектом, не повторяя имени объекта. Ссылка на свойства и методы этого объекта внутри инструкции With начинается с точки. Эта инструкция очень часто используется при записи макросов. Синтаксис инструкции: With Объект

[Инструкции]

End With

Практические задания Задание 8.1

Запишите макрос, который выполняет следующие действия:

  1. Добавить новый лист.

  2. Переименовать лист, дав ему имя «Таблица».

  3. В ячейку A1 ввести заголовок таблицы «Ведомость».

  4. Выделить диапазон ячеек A1:C1, отформатировать заголовок (курсив, размер – 14, выравнивание – по центру выделения).

  5. Во второй строке ввести заголовки столбцов «Фамилия», «Оклад», «Премия».

  6. В ячейку 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

Проверьте работу программы, вызывая форму для ячеек с данными различного типа и внося в них изменения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]