Взаимодействие макроса с объектами Excel

Макрос обычно взаимодействует с объектами приложения, в кото- ром он определѐн - host-приложения (host – хозяин). Объетами Excel являются Книга (Workbook), Рабочий лист (WorkSheet) с Диапазонами ячеек (Range). Объекты обладают свойствами, имеют методы, позво- ляющие изменять свойства. Объекты могут реагировать на происхо- дящие события. Такую возможность целесообразно использовать для эффективного решения примера 6, в котором по очередной указан- ной (выделенной) ячейке с фамилией должны вычисляться суммар- ные показатели для всех строк с этой фамилией.

Для получения адреса указанной (выделенной) ячейки важна реакция листа на событие «Изменение выделения».

Объекты Excel представлены в окне обозревателя проекта (Project) среды VBA. Клик по значку Лист1 в окне Project настраивает окно кода: Лист1 (code). А выбор на этом окне в (General) WorkSheet (по- сле щелчка по треугольнику справа) приводит к генерированию опе- раторов заголовка и конца процедуры обработки события «Измене- ние выделения»:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

В ответ на изменение выделения диапазона (ячейки) Excel передаѐт как значение (By Val ue), т.е. – копирует, в объект Target (мишень) этой внутренней (private – личной) процедуры объект типа Range (диапа-


зон) c характеристиками выделенной ячейки (например, адресом: Target.Address). Вообще говоря, все действия, связанные с обработ- кой этой ячейки, можно поместить внутрь данной процедуры. Но обычно общие действия для ряда объектов (в частности для различ- ных листов) выполняют в модулях. Следуя этому принципу можно всю обработку ячейки из макроса примера 6 оформить как процеду- ру, в которую из процедуры обработки события передаѐтся адрес Addr только что выделенной ячейки. В таком случае процедуру в мо- дуле (названную, например, ModuleSub) следует начать оператором

Sub ModuleSub(ByVal Addr As String) ' Addr – текстовая строка под адрес

Для еѐ вызова и передачи в неѐ фактического адреса только что выде- ленной ячейки в процедуре обработки события помещают оператор вызова процедуры Call:

Call ModuleSub(Target.Address) ' Вызов процедуры с передачей в неѐ адреса

Теперь можно сформулировать

сценарий универсального решения примера 6:

1. По сочетанию клавиш Ctrl+Shift+R макросом запускается процесс анализа общих сумм и количества звонков абонентов.

2. Выделяется ячейка. Если она пуста, то следует переход к пункту 4, иначе (ячейка содержит фамилию) выполняется пункт 3.

3. Процедура обработки события «Изменение выделения» передаѐт адрес только что выделенной ячейки в процедуру ModuleSub, ко- торая вычисляет и выводит требуемые величины. Затем следует переход к пункту 2, где ожидается выделение очередной ячейки.

4. После выделения пустой ячейки процесс анализа прекращается. В макросе RunMac для запуска (по Ctrl+Shift+R) анализа можно ис-

пользовать общую (public) для всех процедур переменную, например,

переменную с именем OnOff. Сначала она имеет значение Empty, а потом OnOff=1, когда процесс анализа запускается («включается») макросом:

Public OnOff ¢ объявление общей переменной

Sub RunMac()

OnOff = 1: Cells(2, 1) ="Вкл" ' Символы Вкл - в ячейку $A$2

End Sub


В процедуре (рабочего листа) обработки события «Изменение выде- ления» вызов ModuleSub выполняется лишь тогда, когда OnOff =1:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If OnOff = 1 Then Call ModuleSub(Target.Address) ' Вызов с передачей адреса

End Sub

При завершении анализа, когда при OnOff =1 адрес указывает на пустую ячейку, необходимо в процедуре ModuleSub назначить OnOff = Empty, «выключить» анализ и выйти из процедуры по оператору выхода Exit Sub. С этим добавлением размещаемая в том же модуле, что и макрос процедура ModuleSub имеет следующий вид:

Sub ModuleSub(ByVal Addr As String) ¢ Addr – текстовая строка под адрес

If Range(Addr) = Empty Then

OnOff = Empty: Cells(2, 1) = "Выкл": Exit Sub ' Выкл - в ячейку $A$2

End If

Fam$ = Range(Addr) ' Копировать фамилию в Fam$

i = 3: S = 0: Kol = 0 ' Текст из примера 6:

Do While Cells(i, 2) <> Empty

If Cells(i, 2) = Fam$ Then

S = S + Cells(i, 3) Kol = Kol + 1

End If

i = i + 1

Loop

Cells(1, 2) = S: Cells(1, 4) = Kol ¢ Запись результатов в B1, D1 и F1: If (Kol <> 0) Then Cells(1, 6) = S / Kol ' Kol=0 при некорректном указании Cells(1, 8) = Fam$ ' Фамилию - в ячейку $H$1

End Sub

Вывод результатов в форму можно обеспечить, если использовать объект UserForm (экранная форма или просто форма), который со- ставляет часть пользовательского интерфейса приложений Windows. Объекту UserForm (как экземпляру класса UserForm) присущи его свойства и методы. Каждый объект UserForm включает в себя также модуль класса, в который можно добавлять собственные методы и


свойства или код для обработки событий формы. В приложениях MS Office, и в частности в Excel, форма подключает- ся после выбора UserForm в пункте Insert меню редактора VBA. В результате появляется пустое диалоговое окно формы, имя формы UserForm1 включается в

Project, в окне Properties представлены свойства формы, доступные для ре- дактирования. Можно изме- нить, например, имя (Name) формы на новое frmITOG, а также свойство Caption (на- звание), набив, например, слово ИТОГ в поле справа от Caption. После чего это новое название появится в заголов- ке формы (см. рис. 6.3).

К объекту UserForm можно добавлять элементы


управления с панели Toolbox.


Рис. 6. 3.


Для наших целей подойдѐт Label (Надпись) – пиктограмма с буквой

«A», которую следует отбуксировать в центр формы. После этого надпись Label1 становится подобъектом формы frmITOG; она имеет своѐ свойство Caption (записывается как frmITOG.Label1.Caption), ко- торое можно использовать для вывода результатов в управляющий элемент Надпись. Для примера 6 в конец процедуры ModuleSub (перед оператором End Sub) добавлены следующие операторы:

frmITOG.Caption = Fam$ & "Сум.СЧЕТ:" ' вывод на место названия формы frmITOG.Label1.Caption = S & " руб." ' вывод в Надпись Call frmITOG.Show ' вызов метода Show делает форму видимой

По сочетанию клавиш Ctrl+Shift+R можно снова запускать теперь уже итоговый макрос для примера 6.


После запуска в ячейку

$A$2 выводятся симво- лы «Вкл» - включен анализ, и можно выде- лять ячейку с фамилией. После еѐ выделения процедура модуля вы- полняет вычисление общей суммы, определя-


 

Рис. 6. 4.


ет количество вызовов и среднюю стоимость одного звонка указанно- го абонента, а также заполнение результатами ячеек B1, D1 и F1 (см. рис. 6.4). Фамилия выводится в H1. Кроме того будет выведена форма с фамилией и итоговой суммой. Закрыв форму, можно снова выде- лить ячейку с фамилией и получить суммарные показатели для этой фамилии. После выделения пустой ячейки процесс анализа заверша- ется, а в ячейку $A$2 выводятся символы «Выкл» - анализ выключен.

4.Задание 2

Дополнить и изменить макрос 1-ой части так, чтобы по выделенной ячейке таблицы с наименованием (фамилией) этот макрос вычислял и записывал значения требуемых параметров.

Предъявить работающий макрос преподавателю. Текст макроса и схематичный вид результатов его выполнения записать в отчѐт.

Рекомендуемая литература

1. Информатика базовый курс. Учебник под редакцией С.В. Симоновича – С.Пб.: «Питер», 2005.

2. Информатика и информационные технологии, под ред. Романовой Ю.Д. - М: Издательство «ЭКСМО», 2010.

3. Алехина Г.В., Основы информатики – М.: Маркет ДС, 2009.

4. Дж. Кокс, С. Ламберт, К. Мюррей, К. Фрай, Дж. Преппернау, Microsoft Office System 2007. Русская версия - С.Пб.: ЭКОМ, 2007.

5. Л. Д. Слепцова, Программирование на VBA в Microsoft Office 2007 – М.: Диалектика, 2007.


СОДЕРЖАНИЕ

Введение........................................................................................................... 3

№1. Операционная система Windows........................................................... 4

№2. Работа с текстовым процессором

MS Word.......................................................................................................... 15

№3. Работа с табличным процессором

Microsoft Excel 2007...................................................................................... 30

№4. Система управления базой данных (СУБД) Access. Создание таблиц и схемы данных............................................................................................................. 42

№5. Анализ информации таблиц и БД Access. Создание запросов.. 54

№6. Начала алгоритмизации. Обработка в Excel табличных данных с использованием макросов на VBA............................................................. 66

Рекомендуемая литература....................................................................... 83


 

 

Учебное издание

Калядин Вячеслав Иванович, Макаров Алексей Иванович

 

 

Основы работы на персональном компьютере.

Использование программных средств ПК при проектировании авто- мобильных конструкций. Учебное пособие по дисциплине «Инфор- матика» для студентов, обучающихся по специальности Автомобиле- и тракторостроение. М.: МАМИ, 2010. 85 с.: ил.

Под редакцией авторов

Оригинал-макет подготовлен редакционно-издательским отделом МГТУ «МАМИ»

По тематическому плану внутривузовских изданий учебной литературы на 2010 г.

 

 

Подписано в печать 08.11.2010 Формат 90x60 1/16 Бумага 80 г/м2 Гарнитура «Таймс». Ризография. Уч. печ. л. 5,3.

Тираж 200 экз. Заказ № 129-10

 

МГТУ «МАМИ»

107023, г. Москва, Б.Семѐновская ул. 38.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: