Приложение. Ответы
Ответы к 1-му часу
Тесты
- Язык VBA применяется только в Excel?
Нет, он применим во всех приложениях Microsoft Office, включая
Word и Access.
- На чем основывается язык VBA?
На языке программирования Visual Basic.
- Истинно или ложно следующее утверждение: встроенные функции Excel
можно использовать в приложениях VBA?
Истинно.
- При редактировании кода макроса вы работаете в ________ (три слова).
редакторе Visual Basic.
- Назовите два ограничения записанных макросов.
Во-первых, нет возможности ввести какую-либо информацию
во время выполнения макроса. Во-вторых, нельзя выполнить различные действия
в зависимости от каких-либо условий, например в зависимости от содержимого
ячейки.
Ответы ко 2-му часу
Тесты
- Истинно или ложно следующее утверждение: комбинации клавиш можноназначать
макросам только в процессе записи макросов?
Ложно.
- Назовите три месторасположения, где можно сохранить создаваемый
макрос.
Новый макрос можно сохранить в текущей рабочей книге, в
новой рабочей книге либо в персональной книге макросов.
- В какой папке на жестком диске компьютера хранится личная книга
макросов?
C:\Windows\Application Data\Microsoft\Excel\XLStart
- Истинно или ложно следующее утверждение: личная книга макросов автоматически
открывается при загрузке программы Excel?
Истинно.
- Истинно или ложно следующее утверждение: Excel не позволяет назначать
макросам уже используемые комбинации клавиш?
Ложно.
- Какова основная последовательность действий при назначении макроса
графическому изображению.
Вставить изображение в рабочий лист, щелкнуть правой кнопкой
мыши на изображении и в контекстном меню выполнить команду Назначить
макрос.
Ответы к 3-му часу
Тесты
- Назовите два элемента управления, которые позволяют выбрать одну
опцию из множества возможных опций.
Переключатели и списки.
- Истинно или ложно следующее утверждение: экранные формы можно создавать
только редакторе Visual Basic?
Истинно.
- Как связать элемент управления с ячейкой рабочего листа?
Щелкните на элементе управления правой кнопкой мыши и в
контекстном меню выберите команду Формат объекта. В диалоговом окне
Формат элемента управления перейдите на вкладку Элемент управления
и в поле Связь с ячейкой введите адрес соответствующей ячейки.
- Истинно или ложно следующее утверждение: сетка на экранной форме,
которая видна в редакторе Visual Basic, также видна и при выполнении
формы?
Ложно.
- ______ - это элемент управления, который отображает статический
текст.
Надпись
Ответы к 4-му часу
Тесты
- Назовите три уровня видимости переменных.
Переменные, видимые на уровне процедуры (локальные переменные),
переменные, видимые на уровне модуля, и глобальные (public) переменные.
- Какого типа переменную необходимо использовать для хранения целых
чисел из диапазона от 0 до 100?
В этой ситуации лучшим выбором будет использование переменной
типа Integer.
- Какое максимальное количество символов можно использовать при задании
имен процедур, переменных и констант?
225.
- Истинно или ложно следующее утверждение: имя процедуры может начинаться
с числа?
Ложно.
- Где объявляются глобальные переменные?
В области общих объявлений модуля.
- Истинно или ложно следующее утверждение: константы можно определить
только в процедуре?
Ложно. Константы также можно объявлять в области общих объявлений
модуля.
- Какую функциональную клавишу следует нажать для выполнения процедуры
в редакторе Visual Basic?
<F5>.
Упражнение
Создайте новую процедуру с именем ПеремИКонст. Создайте
переменную с именем sTest типа String. Создайте константу
с именем iNumber типа Integer и положите ее равной 2. Установите
значение переменной sTest как "Это простой тест". Выведите
на экран значения переменной sTest и константы iNumber.
Полный код процедуры:
Public Sub ПеремИКонст()
Dim sTest As String
Const iNumber As Integer = 2
sTest = "Это простой тест"
MsgBox "Значение переменной sTest: " & STest
MsgBox "Значение константы iNumber: " & iNumber
End Sub
Ответы к 5-му часу
Тесты
- Как можно объединить несколько строк?
Для объединения несколько текстовых строк в одну используется
символ конкатенации (&).
- Какой тип данных возвращаемого значения окна сообщения?
Integer.
- Какой тип данных возвращаемого значения метода InputBox?
Тип возвращаемого значения зависит от значения аргумента
Туре.
- Какие установки можно задать для окна сообщений с помощью аргумента
кнопки?
Типы кнопок и их размещение в окне; пиктограмму, отображаемую
в окне; указать, какая кнопка назначается кнопкой по умолчанию.
- Истинно или ложно следующее утверждение: в VBA аргументы операторов
и функций идентифицируются только своим местоположением в списке аргументов?
Ложно. Для идентификации аргументов можно использовать имена
аргументов.
Упражнение
Создайте процедуру с именем ВашИнфо. Эта процедура должна
выполнять следующие задачи.
- Отобразить три окна ввода. Первое окно предназначено для ввода имени
пользователя. Во втором окне надо ввести название города, где живет
пользователь, а в третьем - возраст пользователя.
- Отобразить введенную в трех окнах ввода информацию в одном окне
сообщения.
Полный код процедуры:
Public Sub ВашИнфо()
Dim sName As String
Dim sCity As String
Dim sAge As String
sName = Application.InputBox("Введите ваше имя",
Туре:=2)
sCity = Application.InputBox("Введите название
вашего города", Туре:=2)
sAge = Application.InputBox("Введите ваш возраст",
Type:=l + 2)
MsgBox sName & " живет в " & sCity & ", его возраст
" & sAge & _
" года (лет)."
End Sub
Ответы к 6-му часу
Тесты
- Какие два основные оператора используются для управления потоком
выполнения приложений?
Операторы If и Select Case.
- Истинно или ложно следующее утверждение: операторы If и
Select Case чувствительны к регистру используемых значений?
Истинно.
- Какой метод позволяет отображать встроенные диалоговые окна Excel?
Метод Show.
- Как преобразовать текстовую строку, чтобы все символы были прописными?
Надо использовать функцию UCase.
Упражнение
Во-первых, создайте процедуру с именем ТестЩелчок. Эта
процедура должна выводить на экран окно сообщения с текстом "Вы хотите продолжать?"
и кнопками ОК и Отмена. Примените оператор If, чтобы
узнать, на какой кнопке щелкнул пользователь, и выведите окно сообщения,
показывающее выбор пользователя.
Далее, создайте еще одну процедуру под названием Скидка.
Процедура должна вывести на экран окно ввода, предлагающее ввести категорию
скидки: 1, 2, 3 или 4. С помощью оператора Select Case организуйте
вывод величины скидки в окне сообщения. Категории 1 соответствует скидка
5%, категории 2 - 10%, категории 3 - 15% и категории 4 - 20%.
Полный код процедуры;
Sub ТестЩелчок()
Dim iResponse As Integer
iResponse = MsgBox("Вы хотите продолжать?", vbOKCancel)
If iResponse =vbOk Then
MsgBox "Щелчок на кнопке ОК."
Else
MsgBox "Щелчок на кнопке Cancel."
End If
End Sub
Sub Скидка()
Dim iDiscountCategory As Integer
iDiscountCategory = InputBox("Введите категорию
скидки; ")
Select Case iDiscountCategory
Case 1
MsgBox "Скидка 5%"
Case 2
MsgBox "Скидка 10%"
Case 3
MsgBox "Скидка 15%"
Case 4
MsgBox "Скидка 20%"
Case Else
MsgBox "Неправильная категория скидки."
End Select
End Sub
Ответы к 7-му часу
Тесты
- Назовите два основных типа операторов цикла в VBA.
Операторы типа For и операторы типа Do.
- Какой оператор позволяет досрочно выйти из цикла?
Оператор Exit For и оператор Exit Do.
- Какие есть два типа оператора Do... Loop?
Оператор Do While и оператор Do Until.
- Истинно или ложно следующее утверждение: логическое условие для
оператора Do... Loop должно располагаться только в начале оператора?
Ложно.
Упражнение
С помощью оператора For создайте процедуру с именем
РабочиеЧасы, которая позволяет вводить для пяти дней недели количество
часов, отработанных в эти дни. Процедура также должна выводить окно сообщения
с суммарным количеством рабочих часов за неделю.
Создайте другую процедуру и назовите ее Зарплата. Процедура
должна считать недельную зарплату при условии почасовой оплаты. Минимальная
стоимость рабочего часа, предположим, составляет 6 у.е. Примените оператор
Do... Loop для управлением окном ввода, где пользователь должен ввести
собственную почасовую ставку. Используйте суммарное количество рабочих часов
в неделю, подсчитанное процедурой РабочиеЧасы. Итоговое значение
выведите на экран с помощью окна сообщения.
Полный код процедур:
Public sngNumberOfHours As Single
Public Sub РабочиеЧасы()
Dim iCounter As Integer
For iCounter = 1 To 5
sngNumberOfHours = sngNumberOfHours + InputBox
("Введите _
количество отработанных часов в " & iCounter
& "-й день")
Next
MsgBox "Всего за эту неделю отработано " & sngNumberOfHours
& "часов"
End Sub
Public Sub Зарплата()
Dim sngRate As Single
Dim sngSalary As Single
Do While sngRate < 6
sngRate = InputBox("Введите почасовую ставку:
")
If sngRate <6 Then
MsgBox "Минимальная почасовая ставка 6.00"
End If
Loop
MsgBox "Недельная зарплата составила " & sngRate
* sngNumberOfHours
End Sub
Ответы к 8-му часу
Тесты
- Как задать значение свойству?
С помощью оператора Объект.имя_свойства = значение
- Как вызвать на исполнение метод?
С помощью оператора Объект.метод
- Какой оператор назначает объект переменной объекту?
Оператор Set.
- Истинно или ложно следующее утверждение: только объекты имеют свойства
и методы, но не коллекции?
Ложно. Коллекции также имеют свойства и методы. Например,
все коллекции имеют метод Addи свойство Count.
- Как создать новый элемент коллекции?
С помощью метода Add.
Упражнение
Используя окно просмотра объектов Object Browser или
справочную систему Visual Basic, найдите следующие свойства.
Для объекта Application:
- каталог, где инсталлирована программа Excel;
- используемую операционную систему;
- зарегистрированное имя пользователя программы Excel.
Для объекта Workbook:
- где сохранена рабочая книга.
Используйте эту информацию для создания процедуры. В текущую
рабочую книгу вставьте новый модуль. Создайте новую процедуру с именем
СкажиМне. Эта процедура должна использовать найденные вами свойства
для вывода последовательности окон сообщений со значениями этих свойств.
Полный код процедуры:
Sub СкажиМне()
MsgBox "Excel инсталлирована в каталоге " & Application.Path
MsgBox "Excel работает под управлением операционной
системы " _
& Application.OperatingSystem
MsgBox Application.UserName & " - зарегистрированный
пользователь."
MsgBox "Эта рабочая книга имеет " & Worksheets.Count
& " листа(ов)."
MsgBox "Рабочая книга сохранена? " & ThisWorkbook.Saved
End Sub
Ответы к 9-му часу
Тесты
- Как в VBA применить функцию МАХ для нахождения максимального
значения из диапазона ячеек А1:С5?
Используйте оператор
sngResult = Application.Max(Range("A1:C5"))
- Какой объект находится на высшем уровне иерархии объектов?
Объект Application.
- Какой метод применяется для создания новых рабочих книг и рабочих
листов?
Метод Add.
- Как в VBA удалить рабочий лист из рабочей книги?
Надо применить метод Delete объекта Worksheet.
- Истинно или ложно следующее утверждение: из процедуры VBA нельзя
вызывать на исполнение макросы, записанные в стиле Excel 4.0?
Ложно. Макросы, записанные в стиле Excel 4.0, можно выполнить
с помощью метода Run объекта Application.
Упражнение
Создайте новую процедуру УпрЧас9, которая должна выполнить
следующие действия:
- создать новую рабочую книгу;
- вставить в эту книгу новый рабочий лист;
- дать новому рабочему листу ваше имя;
- сохранить рабочую книгу под именем УпрЧас9.
Выполните процедуру. Откройте рабочую книгу УпрЧас9
и введите несколько значений в рабочий лист с вашим именем. Создайте новую
процедуру с именем СохрЧас9. Эта процедура должна определить, сохранена
ли рабочая книга после внесения в нее изменений. Если книга была сохранена,
то должно выводиться окно с соответствующим сообщением.
Полный код процедур:
Sub УпрЧас9()
Dim wbH9Workbook As Workbook
Dim wsH9Worksheet As Worksheet
Set wbH9Workbook = Workbooks.Add
Set wsH9Worksheet = wbH9Workbook.Worksheets.Add
wsH9Worksheet.Name = "Петя"
wbH9Workbook.SaveAs ("УпрЧас9")
End Sub
Sub CoxpЧac9()
If Workbookg("УпрЧас9.xls").Saved = True Then
MsgBox "Эта рабочая книга уже сохранена."
Else
Workbooks("УпрЧас9.xls").Save
MsgBox "Теперь рабочая книга сохранена."
End If
End Sub
Ответы к 10-му часу
Тесты
- Истинно или ложно следующее утверждение: в VBA диапазон всегда состоит
из многих ячеек?
Ложно. Одна ячейка также считается диапазоном.
- Какое свойство объекта Range позволяет определить адрес одного
диапазона на основе адреса другого?
Свойство Offset.
- Если необходимо изменить значения всех ячеек диапазона, то какой
оператор, требующий минимального кода, следует применить?
Оператор For Each.
- Какое свойство позволяет выделить диапазон, не определяя заранее
егоразмеры и местоположение, а только зная местоположение хотя бы однойячейки
внутри диапазона?
Свойство CurrentRegion.
- Как определить, какое количество ячеек составляют диапазон?
С помощью свойства Count.
- Какой метод применяется для удаления содержимого диапазона?
Метод Clear.
- Необходимо установить значения нескольких свойств определенного
объекта. Как наиболее эффективно это сделать?
С помощью оператора With.
Упражнение
Откройте новую рабочую книгу. Введите следующие значения в
первый лист рабочей книги.
Ячейки |
Значения |
А1 |
Товар |
А2:А6 |
Названия каких-либо товаров |
В1 |
Цеха |
B2 |
15 |
B3 |
5 |
В4 |
3 |
В5 |
7 |
B6 |
9 |
Создайте процедуру с именем СнижениеЦен. Процедура должна
уменьшить значения всех ячеек из диапазона В2:В6 на 5. Если цена будет меньше
или равна нулю, выделите ее и название товара красным полужирным шрифтом.
Также в этом случае (цена меньше или равна нулю) процедура должна вывести
окно сообщения с соответствующим текстом предупреждения.
Полный код процедуры:
Sub СнижениеЦен()
Dim х As Range
Dim bProblems As Boolean
For Each x In Range("B2:B6")
x.Value = x.Value - 5
If x.Value <= 0 Then
x.Offset(0, -1).Select
Selection.Resize(1, 2).Select
With Selection
.Font.Bold = True
.Font.Color = vbRed
End With
bProblems = True
End If
Next
If bProblems = True Then
MsgBox "Некоторые цены получились меньше 0!"
End If
End Sub
Ответы к 11-му часу
Тесты
- Кратко опишите три способа получения сведений из справочной системы
VBA.
Посредством окна просмотра объектов Object Browser,
с помощью клавиши <F5> в окне кода, через меню Help.
- Окно Object Browser можно использовать для просмотра списков
объектов, событий, свойств и ___________.
методов
- Какую комбинацию клавиш надо нажать, чтобы в окне кода перейти в
начало модуля?
<Ctrl+Home>
- __________ - маленькое окно с информацией о синтаксисе вводимой
функции и ее аргументах.
Экранная подсказка
- Где находятся опции, управляющие такими средствами редактора Visual
Basic, как экранная подсказка и автоматическая проверка синтаксиса?
В диалоговом окне Options.
- Истинно или ложно следующее утверждение: справочная система Visual
Basic позволяет только просматривать приведенные там примеры кода, не
разрешая их копирование и вставку в свои процедуры?
Ложно.
Упражнение
Используя справочную систему Visual Basic или окно Object
Browser, найдите следующую информацию.
Метод, используемый для проверки орфографии: метод CheckSpelling
объекта Application.
Свойство, возвращающее местоположение на жестком диске программы
Excel: Path.
Свойство, определяющее, была ли сохранена рабочая книга после
внесенных в нее изменений: Saved.
Метод, используемый для выполнения ручных вычислений (manual
calculation): Calculate.
Свойство, применяемое для сокрытия рабочей книги: Visible.
Метод, используемый для удаления содержимого диапазона ячеек:
Clear.
Ответы к 12-му часу
Тесты
- Как называется режим, в который переходит процедура, достигнув точкиостанова?
Режим останова.
- Как проследить за последовательностью выполняемых операторов?
В режиме пошагового выполнения процедуры.
- Как просмотреть значения переменных и свойств в окне Immediate?
Используется оператор Print (или ?).
- Какой еще, кроме установки точек останова, есть способ приостановить
выполнение процедуры?
Использование наблюдаемых выражений.
- Истинно или ложно следующее утверждение: в режиме останова вы не
можете просмотреть значения переменных?
Ложно. В режиме останова значения всех переменных и констант
доступны для просмотра.
- Назовите два режима пошагового выполнения программ.
Режим Step Over и режим Step Into.
- Истинно или ложно следующее утверждение: наблюдаемые выражения никогда
не воздействуют на ход выполнения процедуры?
Ложно. Значения наблюдаемых выражений можно изменить и поместить
в выполняемую процедуру в режиме останова.
Упражнение
Создайте следующую процедуру.
Sub ПримерЧас12()
Dim sWhichState As String
sWhichState = InputBox("Введите название штата,
куда доставляется груз")
Select Case UCase (sWhichState)
Case "FL"
MsgBox "Стоимость доставки 3.50"
Case "NY"
MsgBox "Стоимость доставки 5.00"
Case "OH"
MsgBox "Стоимость доставки 2.00"
Case "СА"
MsgBox "Стоимость доставки 6.00"
Case Else
MsgBox "В этот штат доставка не предусмотрена"
End Select
End Sub
Выполните процедуру и введите Ny в окно ввода. Используйте
средства отладки и тестирования, описанные в этом часе, чтобы найти и исправить
ошибки в процедуре.
Исправление в коде помечено полужирным шрифтом.
Ответы к 13-му часу
Тесты
- Опишите три основные этапа создания обработчика ошибок.
1.) Установка ловушек для ошибок; 2.) Написание процедуры
обработки ошибок; 3.) Создание выхода из процедуры обработки ошибок.
- Назовите объект и его свойство, которые применяются для определения
номера ошибки.
Свойство Number объекта Err.
- Какой оператор возвращает управление тому оператору, при выполнении
которого произошла ошибка?
Оператор On Error Resume.
- Какой символ завершает имя метки?
Двоеточие.
- Какой оператор пропускает тот оператор, где произошла ошибка?
Оператор On Error Resume Next.
- Истинно или ложно следующее утверждение: каждая процедура должна
иметь собственный обработчик ошибок?
Ложно. Можно создать централизованный обработчик ошибок.
- Какая логическая конструкция лучше всего подходит для создания обработчика
ошибок?
Структура оператора Select Case.
Упражнение
Создайте следующую процедуру:
Sub ПроцСОшибкой()
Workbooks.Open "С:\неттакогофайла.wkb"
End Sub
Добавьте в эту процедуру код обработчика ошибок, который отображал
бы окно с соответствующим сообщением и передавал управление оператору, следующему
за оператором, вызывающим ошибку.
Полный код процедуры:
Sub ПроцСОшибкой()
On Error GoTo MyErrorHandler
Workbooks.Open "С: \неттакогофайла.wkb"
Exit Sub
MyErrorHandler:
MsgBox "Такого файла не существует."
Resume Next
End Sub
Ответы к 14-му часу
Тесты
- Истинно или ложно следующее утверждение: сетка на экранной форме
отображается и в редакторе Visual Basic, и при выполнении формы?
Ложно. Сетка на экранной форме отображается только в редакторе
Visual Basic в режиме конструктора.
- Какое свойство применяется для назначения быстрых клавиш элементу
управления?
Свойство Accelerator.
- Как указать, какая командная кнопка должна "сработать" при нажатии
клавиши <Enter>?
Задав свойству Default значение True.
- Какое значение какому свойству надо задать, чтобы переключатель
был выбран по умолчанию?
Надо задать значение True свойству Value.
- Истинно или ложно следующее утверждение: выравнивание элементов
управления требует задания значений свойств?
Ложно. Элементы управления можно выровнять с помощью команд
из меню Format или инструментов Align панели UserForm.
- Что произойдет, если для командной кнопки вы установите значение
True свойства Cancel?
Процедура, назначенная этой командной кнопке, будет выполнена
при нажатии пользователем клавиши <Esc>.
- Как задать порядок обхода элементов формы при нажатии клавиши <Tab>?
Простейший способ: создавать элементы формы в той последовательности,
каков запланированный порядок обхода элементов формы при нажатии клавиши
<Tab>.
Ответы к 15-му часу
Тесты
- Как установить блокировку элемента управления?
Надо задать свойству Enabled значение True.
- Как вызвать форму на экран?
С помощью метода Show формы.
- В какой процедуре находится код инициализации значений элементов
формы?
В процедуре UserForm_Activate.
- Как удалить экранную форму из памяти компьютера?
С помощью метода Unload.
- Если необходимо вернуться к какому-либо элементу управления посредством
кода, то какой метод следует применить?
Надо к элементу управления применить метод SetFocus.
- Где хранятся элементы списков?
Элементы списков можно хранить в отдельном файле, можно
их поместить в именованный диапазон рабочего листа.
- Какое свойство списков задает элемент, отображаемый в списке по
умолчанию?
Свойство Listindex задает порядок отображения элементов
в списке.
- В какой процедуре обычно проверяются на корректность данные, вводимые
пользователем?
Обычно в процедуре, выполняемой по щелчку на кнопке Сохранить
или ОК.
Упражнение
Создать процедуру с именем ПоказФормы, которая должна
выводить на экран форму frmSplash, созданную как упражнение в 14-м
часе.
Создайте код, посредством которого после щелчка на кнопке
ОК в форме frmSplash будет открываться форма Гостевые расходы.
Код процедуры ПоказФормы:
Sub ПоказФормы()
frmSplash.Show
End Sub
Код процедуры cmdOK_Click:
Private Sub cmdOK_Click()
frmGuestExpenses.Show
Unload Me
End Sub
Ответы к 16-му часу
Тесты
- Какой коллекции принадлежат панели инструментов как элементы?
Коллекции CommandBars.
- Какое свойство используется для назначения кнопке панели инструментов
макроса или процедуры?
Свойство OnAction.
- Какой коллекции принадлежат кнопки панелей инструментов как элементы?
Коллекции Controls.
- Какой метод применяется для удаления панелей инструментов?
Метод Delete.
- Как вывести на экран панель инструментов с помощью кода VBA?
Надо задать свойству Visible панели инструментов
значение True.
- Какое свойство применяется для задания значка, выводимого на кнопке?
Свойство FaceID.
- Истинно или ложно следующее утверждение: после создания панель инструментов
автоматически выводится на экран?
Ложно. Для вывода на экран панели инструментов надо задать
свойству Visible панели инструментов значение True.
Упражнение
Создайте процедуру с именем Панель_Час16. Эта процедура
должна создать и вывести на экран панель инструментов 16-й час с
тремя кнопками: Создать (ID равен 2530), Открыть (ID
равен 23) и Сохранить (ID равен 3).
Создайте также процедуру ЗакройПанель, которая будет
удалять панель 16-й час.
Полный код процедур:
Sub Панель_Час16()
Dim cbHour16 As CommandBar
Set cbHour16 = CommandBars.Add(Name:="16-й час")
With cbHour16
.Visible = True
.Controls.Add Type:=msoControlButton, *ID:=2520,
Before:=1
.Controls.Add Type:=msoControlButton, ID:=23,
Before:=2
.Controls.Add Type:=msoControlButton, ID:=3, Before:=3
End With
End Sub
Sub ЗакройПанель()
CommandBars("16-й час").Delete
End Sub
Ответы к 17-му часу
Тесты
- Какой метод используется для создания меню?
Метод Add.
- Какое свойство пользовательской команды (элемента меню) назначает
процедуру, выполняемую при выборе этой команды?
Свойство OnAction.
- Какой тип элемента управления задает пункт меню?
msoControlPopup.
- Как удалить строку меню с помощью кода VBA?
С помощью метода Delete.
- Какое диалоговое окно должно быть открыто при настройке меню?
Диалоговое окно Настройка, которое открывается с
помощью команды Сервис > Настройка.
- Для создания командной панели вы используете метод Add. Какой аргумент
этого метода (и как) надо задать, чтобы командная панель автоматически
удалялась при закрытии приложения, содержащего эту панель?
Для этого необходимо задать необязательному аргументу
Temporary метода Add значение True (no умолчанию этот
аргумент имеет значение False).
- Как вывести на экран строку меню?
Надо задать свойству Visible строки меню значение
True.
Упражнение
Напишите процедуру, которая создавала бы и выводила на экран
строку меню (с именем Пример17), содержащую пункты Файл,
Правка и Справка. Напишите еще одну процедуру для удаления
этой строки меню. На свободном рабочем листе создайте две командные кнопки,
которые выполняли бы эти процедуры.
Полный код процедур:
Sub Пример17()
Dim Ex17menubar As CommandBar
Dim mymenu As Object
Dim mymenuitem As Object
Set Ex17menubar = CommandBars.Add(Name:="Пример17",
_
Position:=msoBarTop, MenuBar:=True, Temporary:=True)
With Ex17menubar
.Controls.Add Type:=msoControlPopup, ID:=30002,
Before:=1
.Controls.Add Type:=msoControlPopup, ID:=ÒÒÑ,
Before:=2
.Controls.Add Type:=msoControlPopup, ID:=30010,
Before:=3
.Visible = True
End With
CommandBars("Worksheet Menu Bar").Visible = False
End Sub
Sub УдалениеПримера17()
CommandBars("Пример17").Delete
End Sub
Ответы к 18-му часу
Тесты
- Какой оператор VBA используется для создания диаграммы?
Оператор Charts.Add.
- Какое свойство объекта Application возвращает текущую активную
диаграмму?
Свойство ActiveChart.
- Какое свойство объекта Chart определяет тип создаваемой диаграммы?
Свойство ChartType.
- Какой метод объекта Chart управляет данными, отображаемыми
в диаграмме?
Метод SourceData.
- Что из перечисленного не является свойством объекта Chart:
ChartArea, ChartType, ChartLocation или ChartTitle?
ChartLocation.
- Истинно или ложно следующее утверждение: процесс построения диаграмм
можно записать с помощью макроса?
Истинно. Это самый простой способ создания процедур, строящих
диаграммы.
- Свойство _____________ объекта Workbook возвращает активную
диаграмму.
ActiveChart.
Упражнение
Создайте экранную форму с пятью переключателями (рис. 18.5):
- Круговая диаграмма
- Объемная круговая диаграмма
- Гистограмма
- Гистограмма с накоплением
- Объемная гистограмма с накоплением
Создайте процедуру с именем ВыборТипаДиаграмм, которая
выводила бы экранную форму. В экранной форме, в зависимости от числа столбцов
в выделенном диапазоне ячеек, должен быть предустановлен или переключатель
Круговая диаграмма, или переключатель Гистограмма. После выбора
пользователем типа диаграммы и щелчка на кнопке ОК формы диаграмма
выбранного типа должна быть построена.
Таблица свойств формы и ее элементов
Элемент |
Свойство Caption (Заголовок) |
Свойство Name (Имя) |
Форма |
Выбор типа диаграммы |
frmChartType |
Надпись (в верхней части формы) |
значение свойства Caption задается в процедуре |
lblInfo |
Переключатель |
Круговая диаграмма |
optPie |
Переключатель |
Объемная круговая диаграмма |
opt3DPie |
Переключатель |
Гистограмма |
optClusterColumn |
Переключатель |
Гистограмма с накоплением |
optStackedColumn |
Переключатель |
Объемная гистограмма с накоплением |
opt3DStackedColumn |
Командная кнопка |
ОК |
cmdOK |
Командная кнопка |
Отмена |
cmdCancel |
В области общих объявлений модуля необходимо ввести строку
кода:
Dim rCurrRange As Range
Код процедуры ВыборТипаДиаграмм:
Sub ВыборТипаДиаграмм()
Set rCurrRange = Selection
frmChartType.Show
End Sub
Процедура инициализации экранной формы:
Private Sub UserForm_Initialize()
If rCurrRange.Columns.Count = 2 Then
optPie.Enabled = True
optPie.Value = True
opt3DPie.Enabled = True
opt3DPie.Value = False
optClusterColumn.Enabled = False
optClusterColumn.Value = False
optStackedColumn.Enabled = False
optStackedColumn.Value = False
opt3DStackedColumn.Enabled = False
opt3DStackedColumn.Value = False
lblInfo.Caption = "Для этих данных рекомендуемый
тип диаграмма - круговая"
ElseIf rCurrRange.Columns.Count > 2 Then
optClusterColumn.Enabled = True
optClustorColumn.Value = True
optStackedColumn.Enabled = True
optStackedColumn.Value = False
opt3DStackedColumn.Enabled = True
opt3DStackedColumn.Value = False
optPie.Enabled = False
optPie.Value = False
opt3DPie.Enabled = False
opt3DPie.Value = False
lblInfo.Caption = "Для этих данных рекомендуемый
тип диаграммы - гистограмма"
Else
MsgBox "Выделенный диапазон не позволяет построить
диаграмму"
frmChartType.Hide
End
End If
End Sub
Код процедуры cmdOK_Click (построение диаграмм):
Private Sub cmdOK_Click()
If optPie.Value = True Then
Charts.Add
ActiveChart.ChartType = xlPie
ActiveChart.SetSourceDate Source:=rCurrRange,
PlotBy:= xlColumns
ActiveChart.Location Where:=xlLocationAsObject,
Name:="Лист1"
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowPercent,
_
LegendKey:=False, HasLeaderLines:=True
ElseIf opt3DPie.Value = True Then
Charts.Add
ActiveChart.ChartType = xl3DPie
ActiveChart.SetSourceDate Source:=rCurrRange,
PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject,
Name:="Лист1"
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowPercent,
_
LeqendKey:=False, HasLeaderLines:=True
ElseIf optStackedColumn.Value = True Then
Charts.Add
ActiveChart.ChartType = xlColumnStacked
ActiveChart.SetSourceDate Source:=rCurrRange
ActiveChart.Location Where:=xlLocationAsObject,
Name:="Лист1"
ElseIf optClusterColumn.Value = True Then
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceDate Source:=rCurrRange
ActiveChart.Location Where:=xlLocationAsObject,
Name:="Лист1"
ElseIf opt3DStackedColumn.Value = True Then
Charts.Add
ActiveChart.ChartType = xl3DColumnStacked
ActiveChart.SetSourceDate Source:=rCurrRange
ActiveChart.Location Where:=xlLocationAsObject,
Name:="Лист1"
End If
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Объем продаж"
.ChartTitle.Select
End With
Selection.AutoScaleFont = True
With Selection.Font
.Name = "Arial"
.FontStyle = "полужирный курсив"
.Size = 14
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
frmChartType.Hide
End Sub
Код процедуры cmdCancel_Click:
Private Sub cmdCancel_Click()
frmChartType.Hide
End Sub
Ответы к 19-му часу
Тесты
- Истинно или ложно следующее утверждение: сводную таблицу можно создать
только на основе данных, которые записаны на рабочем листе Excel?
Ложно. Сводную таблицу можно создать на основе данных из
разных источников, включая внешние базы данных и другие сводные таблицы.
- Назовите имена двух коллекций, которые необходимы для создания сводных
таблиц.
Коллекция PivotCaches и коллекция PivotTables.
- Какое свойство объекта PivotField назначает поля данных областям
сводной таблицы (т.е. областям страницы, строк, столбцов и данных)?
Свойство Orientation.
- Истинно или ложно следующее утверждение: в область Строка
сводной таблицы можно поместить только одно поле данных?
Ложно. Во все области сводной таблицы можно помещать по
несколько полей.
- Назовите четыре области сводной таблицы.
Области сводной таблицы следующие: Страница, Строка.
Столбец и Данные.
- Какой метод создает отчет сводной таблицы?
Метод CreatePivotTable.
- Истинно или ложно следующее утверждение: для создания сводной таблицы
можно записать соответствующий макрос?
Истинно. Запись макроса - простой путь написания процедуры,
создающей сводную таблицу.
Упражнение
В таблицу данных, показанную на рис. 19.1, добавьте еще одно
поле Изделия, где будут представлены изделия, составляющие категорию
товара (рис. 19.7). Начните запись макроса, который на основе этой таблицы
данных будет создавать сводную таблицу. При создании сводной таблицы руководствуйтесь
рис. 19.8. Остановите запись макроса. Измените код макроса так, чтобы из
рабочей книги были удалены все рабочие листы, кроме листа Данные, и сводной
таблице задавалось имя Анализ_продаж.
Полный код процедур:
Sub СоздСводТабл()
Dim x As Worksheet
Application.DisplayAlerts = False
For Each x In Worksheets
If x.Name<>"Данные" Then
x.Delete
End If
Next x
Application.DisplayAlerts = True
'В следующем операторе обратите внимание на задание
диапазона
'данных R1C1:R145C5 - у вас он может быть другим.
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDataBase,
_
SourceData:="Данные!R1C1:R145C5").CreatePivotTable
_
TableDestination: = "", TableName: = "Анализ_продаж"
ActiveSheet.PivotTableWizard TableDestination:=
_
ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("Анализ_продаж").SmallGrid
= False
With ActiveSheet.PivotTables("Анализ_продаж").PivotFields("Год")
.Orientation = xlPageField
.Position = 1
End With
With ActiveSheet.PivotTables("Анализ_продаж").
_
PivotFields("Район")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("Анализ_продаж").
_
PivotFields("Категория товара")
.Orientation = xlColumnField
.Position = 2
End With
With ActiveSheet.PivotTables("Анализ_продаж").
_
PivotFields("Изделие")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Анализ продаж").
_
PivotFields("Объем продаж")
.Orientation = xlDataField
.Position = 1
End With
End Sub
Ответы к 20-му часу
Тесты
- Назовите коллекцию, элемент которой создается методом Add
в процедуре использования MS Query.
Коллекция QueryTables.
- Назовите имя свойства, которое содержит оператор Select при
создании запроса.
Свойство CommandText.
- Истинно или ложно следующее утверждение: MS Query Может работать
только с базами данных Access?
Ложно. MS Query может работать практически со всеми современными
базами данных.
- Истинно или ложно следующее утверждение: MS Query может извлекать
данные одновременно из нескольких таблиц базы данных?
Истинно.
- Какое основное преимущество импортирования внешних данных с помощью
MS Query?
То, что процесс импортирования можно записать с помощью
макроса.
- Назовите четыре различных способа извлечения внешних данных в Excel.
1) MS Query (Запрос Microsoft); 2) ADO (ActiveX Dam Objects
- Объекты данных ActiveX); 3) DAO (Data Access Objects - Объекты
доступа к данным); 4) ODBC (Open Database Connectivity - Взаимодействие
открытых баз данных)
Упражнение
Создайте копию процедуры ПримерMSQuery и назовите ее
СортировкаДанных. Создайте экранную форму с четырьмя переключателями:
- Код продукта
- Марка
- Цена
- На складе
Измените процедуру СортировкаДанных таким образом, чтобы
извлекаемые данные сортировались по тому столбцу, которому соответствует
выбранный переключатель в экранной форме.
В область общих объявлений модуля поместите строку кода
Public sSortChoice As String
Код процедуры СортировкаДанных:
Sub СортировкаДанных()
Dim sngPrice As Single
Dim sMessege As String
Worksheets.Add
sMessege = "Цена должна быть больше чем"
sngPrice = Application.InputBox(sMessege, "Ввод
значения цены", _
Type:=1)
frmSort.Show
With ActiveSheet.QueryTables.Add(Connection:=Array(Array("ODBC;
_
DSN=База данных MS Access;DBQ=c:\Program Files\
_
Microsoft Office\Office\Samples\Борей; _
DefaultDir=c:\Program Files\Microsoft "), _
Array("Office\Office\Samples;DriverId=25;FIL=MS
Access; _
MaxBufferSize=2048;PageTimeout=5;")), _
Destination:=Range("A1")).CommandText - Array("SELECT
_
Товары.КодТовара, Товары.Марка, Товары.Цена, _
Товары.НаСкладе" & Chr(13) & "" & Chr(10) & "FROM
_
'c:\program Files\Microsoft Office\Office\Samples\
Борей'.Товары Товары" & Chr(13) & "" & Chr(10)
& "WHERE _
(Товары.Марка>=" & sngPrice & ")" & Chr(13) ""
_
& Chr(10) & "ORDER BY Товары." & sSortChoice)
.Name = "Запрос из База данных MS Access"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub
Код, ассоциированный с экранной формой (в процедуре СортировкаДанных
она названа frmSort):
Private Sub cmdCancel_Click()
frmSort.Hide
End
End Sub
Private Sub cmdOK_Click()
If optProductID = True Then
sSortChoice = "КодТовара"
ElseIf optProduct.Name = True Then
sSortChoice = "Марка"
ElseIf optUnitPrice = True Then
sSortChoice = "Цена"
Else
sSortChoice = "НаСкладе"
End If
frmSort.Hide
End Sub
Ответы к 21-му часу
Тесты
- Какой аргумент метода Open используется для указания объема,
из которого извлекаются данные?
Аргумент Source.
- Истинно или ложно следующее утверждение: для организации доступа
к внешним данным с помощью ADO достаточно создать соответствующую процедуру?
Ложно. Необходима ей с установить ссылку на библиотеку Microsoft
ActiveX Data Objects 2.0 Library.
- Какой объект сохранят информацию о проблемах, возникших при использовании
ADO?
Объект Error.
- Истинно или ложно следующее утверждение: с помощью ADO можно получить
доступ только к базам данных Microsoft Access?
Ложно. С помощью ADO можно получить доступ практически ко
всем современным базам данных.
- Какой объект представляет массив данных, извлеченный из внешнего
источника с помощью ADO?
Объект Recordset.
- Как прервать соединение с внешним источником данных?
С помощью оператора Close.
- Назовите четыре этапа работы с ADO.
1) Установление соединения с источником данных; 2) Получение
доступа к. данным; 3) Извлечение определенных записей из источника данных;
4) Закрытие соединения с источником данных.
Упражнение
Создайте экранную форму с тремя переключателями Заказы,
Поставщики, Товары (соответствуют таблицам в базе данных
Борей). Напишите процедуру, которая импортировала бы данные из таблицы
базы данных Борей в соответствии с выбранным переключателем.
Задайте экранной форме имя frmPickData, с ней ассоциированы
следующие процедуры:
Private Sub cmdCancel_Click()
frmPickData.Hide
End Sub
Private Sub cmdOK_Click()
If optSuppliers.Value = True Then
sUserChoice = "Заказы"
ElseIf optProducts.Value = True Then
sUserChoice = "Товары"
Else
sUserChoice = "Поставщики"
End If
frmPickData.Hide
ИмпортДанных
End Sub
Полный код остальных процедур (повторен код процедуры-функции
Поворот из 21-го часа):
Public sUserChoice As String
Sub ИмпортДанных()
Dim rsData As ADODB.Recordset
Set rsData = New ADODB.Recordset
rsData.Open Source:= sUserChoice, _
activeconnection: = "Provider=Microsoft.Jet.OLEDB.4.0;
_
Data Source=C:\Program Files\Microsoft _
Office\Office\Samples\Борей.mdb", _
CursorType:=adOpenStatic, _
LockType:=adLockOptimistic, _
Options:=adCmdTable
With Worksheets("Лист!")
.Range("A1").CurrentRegion.Clear _
Application.Intersect(.Range(.Rows(1), _
.Rows(rsData.RecordCount)), _
.Range(.Columns(1), .Columns(rsData.Fields.Count))).
_
Value = Поворот (rsData.GetRows _
(rsData.RecordCount))
End With
rsData.Close
End Sub
Function Поворот (ByRef ArrayOriginal As Variant) As
Variant
Dim x As Integer
Dim у As Integer
Dim i As Integer
Dim j As Integer
Dim ArrayTranspose() As Variant
x = Ubound(ArrayOriginal, 1)
у = Ubound(ArrayOriginal, 2)
ReDim ArrayTranspose(y, x)
For i = 0 To x
For j = 0 То у
ArrayTranspose(j, i) = ArrayOriginal(i,
j)
Next
Next
Поворот = ArrayTranspose
End Function
Ответы к 22-му часу
Тесты
- Какой метод применяется для перемещения к последней записи в наборе
извлекаемых записей?
Метод MoveLast.
- Как определить, где начало набора записей?
Проверяется свойство BOF объекта Recordset:
в начале набора записей оно имеет значение True.
- Какой метод применяется для сохранения изменений в наборе записей?
Метод Update.
- Какое свойство объекта Recordset хранит информацию о местоположении
текущей записи?
Свойство Bookmark.
- Какой метод используется для организации поиска данных в наборе
записей?
Метод Find.
- Какое свойства объекта Field используется для возврата значения
поля?
Свойство Value.
- Истинно или ложно следующее утверждение: данные из извлекаемого
набора записей можно вставить только в рабочий лист inn в экранную форму?
Истинно. В приложениях Excel импортируемые данные можно
вставить только в рабочий лист или в экранную форму.
Упражнение
Добавьте новый рабочий лист в книгу и назовите его Запрос
Товары. В ячейки A1, B1, C1 и D1 введите заголовки будущей таблицы:
Код товара, Марка, Цена, Есть на складе соответственно.
Измените процедуру cmdOK_Click так, чтобы она при щелчке на кнопке
ОК переписывала информацию из экранной формы в рабочий лист Запрос
Товары.
Полный код процедуры:
Private Sub cmdOK_Click()
Dim iNumRows As Integer
Worksheets ("Запрос Товары").Activate
Range("A1").Select
Selection.CurrentRegion.Select
iNumRows = Selection.Rows.Count
Range("A1").Select
Selection.Offset(iNumRows, 0).Value = txtProductID.Text
Selection.Offset(iNumRows, 1).Value = txtProductName.Text
Selection.Offset(iNumRows, 2).Value = txtUnitPrice.Text
frmProductInfo.Hide
cnnProduct.Close
End Sub
Ответы к 23-му часу
Тесты
- Какой оператор применяется для создания экземпляра приложения-сервера?
Оператор CreateObject.
- Истинно или ложно следующее утверждение: кроме объектов Excel и
VBA в окне просмотра объектов можно просматривать только объекты библиотек,
на которые созданы ссылки?
Истинно.
- В примере этого часа программа Excel играла роль _________ приложения
(приложения-________).
управляющего (клиента)
- Истинно или ложно следующее утверждение: Excel можно использовать
только как приложение-клиент?
Ложно. Excel можно использовать и как приложение-клиент,
и как приложение-сервер.
- Как установить ссылку на библиотеку объектов?
В редакторе Visual Basic надо выполнить команду Tools
> References.
- Истинно или ложно следующее утверждение: чтобы создать доступ к
программе Word из другого приложения, надо применить технологию автоматизации?
Истинно.
- Истинно или ложно следующее утверждение: все приложения Microsoft
Office в той или иной степени поддерживают технологию автоматизации?
Истинно. Все приложения Microsoft Office поддерживают технологию
автоматизации как приложения-серверы или как приложения-клиенты, либо могут
работать в той и другой роли.
Упражнение
Создайте таблицу данных Excel, показанную на рис. 23.5. Создайте
текстовый документ Word, представленный на рис. 23.6. Вставьте в этот документ
необходимые закладки. Создайте процедуру, которая копировала бы информацию
из таблицы данных Excel и вставляла в соответствующие места документа Word.
Полный код процедуры (имена закладок совпадают с заголовками
столбцов таблицы данных):
Sub Упражнение23()
Dim y As Word.Application
Set y = CreateObject("Word.Application")
With у
.Visible = True
'В следующем операторе путь к текстовому файлу
зависит от
'того, где вы сохранили этот файл. При необходимости
внесите
'изменения в путь
.Documents.OpenFileName:="C:\Мои документы\ТекстДок.dос"
ActiveCell.Copy
.Selection.GoTo What:=wdGoToBookmark, Name:="Номер_изделия"
.Selection.Paste Application.CutCopyMode = False
ActiveCell.Offset(0, 1).Select
Selection.Copy
.Selection.GoTo What:=wdGoToBookmark, Name:="Количество"
.Selection.Paste Application.CutCopyMode = False
ActiveCell.Offset(0, 1).Select
Selection.Copy
.Selection.GoTo What:=wdGoToBookmark, Name:="Цена"
.Selection.Paste Application.CutCopyMode = False
ActiveCell.Offset(0, 1).Select
Selection.Copy
.Selection.GoTo What:=wdGoToBookmark, Name:="Всего"
.Selection.Paste
Application.CutCopyMode = False
End With
End Sub
Ответы к 24-му часу
Тесты
- Если необходимо выполнение определенной процедуры при импортировании
данных с помощью MS Query, какое событие необходимо использовать?
Событие OnData.
- Истинно или ложно следующее утверждение: в рабочей книге может быть
несколько процедур Auto_Open?
Ложно. В любой рабочей книге может быть только по одной
процедуре Auto__Open и Auto_Close.
- Назовите не менее двух свойств событий, которые можно назначить
для выполнения процедур проверки корректности вводимых данных.
Для этого можно использовать OnCalculate, OnEntry,
OnKey и OnSheetDeactivate.
- Истинно или ложно следующее утверждение: вы должны при использовании
надстройки каждый раз загружать ее вручную?
Ложно.
- Предположим, что при закрытии рабочей книги необходимо сохранить
внешний файл Word. Как это сделать?
Напишите процедуру, которая с помощью средств автоматизации
будет сохранять внешний файл Word, и присвойте ей имя Auto_Close.
- Сформулируйте задачи, которые могут выполнять надстройки.
Надстройки могут использоваться для хранения функций, созданных
пользователем, пользовательских диалоговых окон, пользовательских меню,
пользовательских панелей инструментов.
Упражнение
Откройте новую рабочую книгу и создайте процедуру Auto Open,
которая должна выполнять следующие операции:
- ввести текст Дата:, Имя:, Организация: в ячейки
A1, A2 и A3 соответственно;
- с помощью функции Now в ячейку В1 отобразить системное время
компьютера;
- использовать свойство UserName объекта Application
для вставки имени пользователя в ячейку В2;
- использовать свойство OrganizationName объекта Application
для вставки названия организации в ячейку 83;
- подогнать размеры столбцов А и В так, чтобы они полностью отображали
введенные данные.
Полный код процедуры:
Sub Auto_Open()
With ActiveSheet
Range("A1").Value = "Дата:"
Range("B1").FormulaR1C1 - "=NOW()"
Range("A2").Value = "Имя:"
Range("B2").FormulaR1C1 = Application.UserName
Range("A3").Value = "Организация:"
Range("B3"].FormulaR1C1 = Application.OrganizationName
Columns("A:B").EntireColumn.AutoFit
End With
End Sub
|