Добавил:
По своей натуре перфекционист. Поэтому люблю все аккуратно оформлять и упорядочивать, складывать по полочкам. Вот, не пропадать же добру, нажитому за четыре кропотливых семестра. Тут я выложил все мои ответы, курсовые, отчеты и некоторые ДЗ. Они могут вам помочь для получения зачета или сдачи экзамена. Если чего-то не нашли в папочках, то попытайте удачу в разделе НЕОТСОРТИРОВАННОЕ на моей страничке, там все 4 семестра разложены по папкам. ГРУППА КТ-43-15. Годы обучения 2015-2019. Коллекция будет пополняться. Что ж, удачки :З Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

VBA (Стеценко) / VBA_ЛБ_13v2

.pdf
Скачиваний:
45
Добавлен:
15.09.2017
Размер:
1.87 Mб
Скачать

Стеценко А. А.

11

Наберите оставшуюся часть текста Workbook_Open (листинг 1).

Листинг 1 Программа Workbook_Open

Private Sub Workbook_Open()

'Запускается при каждом открытии рабочей книги

'

А.Стеценко, 12.05.13.

 

Dim sday As String

sday = Format(Now, "dddd, d mmmm yyyy г.") With Range("b1")

.Value = "Сегодня " & sday

.Font.Name = "Arial"

.Font.Size = 16

.Font.Bold = True

 

.Font.Color = RGB(200, 50, 200)

End With

End Sub

'end of Workbook_Open

Рекомендации по набору текста программы Workbook_Open

После того, как был установлен флажок (см. п. Р3,а работы VBA1) Require Variable Declaration (Требуется описание переменных), в верхней части листа нового модуля автоматически появляется декларация Option Explicit, которая заставляет VBA воспринимать только объявленные переменные.

Строка комментария начинается знаком апострофа (клавиша возле клавиши Enter). В комментарии укажите свою фамилию и текущую дату. Инструкцию описания переменной набирайте строчными буквами:

dim sday as

Как только вы сделаете пробел после слова as, выпадет подсказка, в которой можно выбрать всё, что нужно. Для ускорения выбора наберите ещё две буквы: st, после чего двойным щелчком выберите в подсказке строку String. Нажмите Enter и набирайте самую длинную строку программы:

sday=format(now,”dddd, d mmmm yyyy г.”)

В этой строке символ обозначает обязательный пробел, почти все буквы латинские и только одна буква русская – в самом конце. Обратите внимание, что между кавычками находится строка текста, поэтому следите за пробелами. После нажатия на <Enter> строка примет надлежащий вид. Набирайте на нижнем регистре (т. е. строчными буквами) следующую строку программы:

with range(“b1”)

With – инструкция группировки, поэтому следующие строки набираются со сдвигом вправо на один шаг табуляции. Заметьте, что после ввода точки каждый раз появляется подсказка, из которой можно почти сразу выбрать (двойным щелчком) нужное слово.

12

Программирование в среде электронных таблиц Microsoft Excel

Р4. Перейдите в окно приложения, сохраните книгу и, не закрывая приложения Excel, закройте книгу, потом сразу её откройте. Ответьте отрицательно на запрос об отключении макросов. На рабочем листе вы увидите результат действия программы Workbook_Open.

Р5. Прочтите текст, который программа Workbook_Open вывела на рабочий лист. Если хотите, можете изменить имя, размер и цвет шрифта.

Покажите результат преподавателю.

Р6. Закройте рабочую книгу, скопируйте файл книги на личный носитель.

Пояснения к программе Workbook_Open

Workbook_Open – это стандартное имя процедуры, которая автоматически запускается при открытии книги Excel. Она относится к процедурам обработки событий (Events) книги и должна размещаться в модуле ЭтаКнига

(ThisWorkbook).

Now – встроенная функция даты и времени, которая возвращает текущие системные дату и время. К словам “функция возвращает значение” нужно привыкнуть: это давно принятое словосочетание для обозначения того факта, что подпрограмма-функция должна вычислить некое значение и вставить его в то место программы, где указано имя функции. В этой программе вместо функции Now можно также применить функцию Date, возвращающую системную дату.

sday – строковая (текстовая) переменная, которая в этой программе имеет вспомогательное назначение. В ней формируется символьная цепочка представления даты. Правила преобразования числа, представляющего дату, в цепочку символов задаются форматными кодами функции Format.

Синтаксис (формальные правила записи) функции Format в простейшем варианте наглядно представлены в программе: после имени функции в скобках указываются арифметическое выражение, имеющее значением число, и способ его представления в виде форматных кодов. В данном случае для числа, представляющего дату, использованные форматные коды обозначают:

dddd – запись названия дня недели аргумента;

d – запись порядкового номера дня месяца аргумента одной или двумя цифрами;

mmmm – запись названия месяца;

yyyy – запись года четырьмя цифрами.

Свойство Range делает объект Range из ячейки В1, в следующих инструкциях программа задаёт свойства этого объекта. Значению объекта присваивается “склейка” строковой константы "Сегодня " и строковой переменной sday. Имя шрифта не указывается, берётся значение “по умолчанию”. Размер шрифта – 16 пт, начертание – полужирное. Цвет шрифта определяется свойством Color, которое задаётся функцией RGB. Интенсивность каждого базового цвета Red, Green и Blue в числовом виде может принимать значения 0…255.

Стеценко А. А.

13

Отметим, что RGB(0,0,0) – это чёрный цвет, RGB(255,255,255) – белый цвет. Вам надлежит подобрать такие значения аргументов функции RGB, которые обеспечивают необходимый, с Вашей точки зрения, цвет шрифта.

Контрольные вопросы к работе VBA2

К1. Как добавить в проект VBA стандартный модуль? К2. Как изменить имя модуля?

К3. Какое функциональное назначение имеет программа Workbook_Open?

К4. Что нужно сделать пользователю, чтобы запустить программу

Workbook_Open на выполнение?

К5. Можно ли изменить имя программы Workbook_Open на какое-либо другое?

К6. Объясните назначение переменной sday. К7. Объясните назначение метода Range.

К8. Объясните, каким образом можно вывести в ячейку значение переменной. К9. Объясните назначение функции Now.

К10. Объясните назначение функции Format.

Работа VBA3. Коллекция Sheets

Цель работы: приобретение навыков программирования операций с листами рабочей книги.

Введение

Рабочие листы в одной рабочей книге составляют коллекцию Worksheets, листы диаграмм входят в коллекцию Charts, коллекции Worksheets и Charts вместе образуют коллекцию Sheets. Членами коллекций Worksheets, Charts и Sheets являются соответственно рабочий лист Worksheet, лист диаграмм Chart и обобщённый лист Sheet. С одним и тем же рабочим листом (или листом диаграмм) можно оперировать как с членом коллекции Worksheets (или коллекции Charts), так и с членом коллекции Sheets. Доступ к членам коллекций возможен по имени или по индексу, например:

Sheets(2).Activate

'Активизировать

лист №2

 

Worksheets("ToDay").Visible = False

'Скрыть

лист ToDay

Отметим свойства Count и Index коллекций. Свойство Count – это количество членов коллекции. В рабочей книге содержится всего Sheets.Count листов, в том числе Worksheets.Count рабочих листов и Charts.Count листов диаграмм.

Свойство Index – порядковый номер члена в коллекции, причём индексы начинаются с 1 и отсчитываются в каждой коллекции.

Каждый лист имеет свойство Name, имя. Следующая программа выводит в окно Immediate индексы и имена всех листов рабочей книги.

Листинг 2

Sub ИндексыИменаЛистов()

14 Программирование в среде электронных таблиц Microsoft Excel

Dim p As Integer

For p = 1 To Sheets.Count

Debug.Print p; Sheets(p).Name

Next p

End Sub

Программа tstIndexName (листинг 3) выводит в окно Immediate сведения о рабочих листах: индекс в коллекции Worksheets, индекс в коллекции Sheets и имя.

Листинг 3

Sub tstIndexName()

'Проверка свойств Index и Name объектов Worksheet Dim k As Integer

For k = 1 To Worksheets.Count

Debug.Print k; Worksheets(k).Index; Worksheets(k).Name Next k

End Sub

Методы коллекции Sheets

Для операций с членами коллекции Sheets (т.е. с листами) объект Workbook имеет несколько методов.

Метод Add добавляет новых членов в коллекцию. Метод Add коллекции Sheets имеет четыре аргумента:

Sheets.Add Before, After, Count, Type

Все аргументы Before, After, Count, Type не являются обязательными. Вполне допустима инструкция без аргументов:

Sheets.Add

Будет добавлен рабочий лист перед активным листом, таково правило умолчания.

Аргументы Before и After задают положение добавляемого листа среди имеющихся листов. Аргумент Before указывает, перед каким листом, а аргумент After после какого листа. Очевидно, что в одной инструкции может быть указан один из этих аргументов, например:

а) добавить рабочий лист в начало книги (до первого имеющегося листа):

Sheets.Add Before:=Sheets(1)

б) добавить рабочий лист в конец книги:

Sheets.Add After:= Sheets(Sheets.Count)

Примечание. Знаком присваивания в Visual Basic является знак =, но для указания значения именованному аргументу метода используется двухсимвольный знак :=, как в АЛГОЛе.

Аргумент Count определяет количество добавляемых листов. По умолча-

нию Count = 1.

Стеценко А. А.

15

Аргумент Type определяет тип добавляемого листа (или листов, если Count > 1). Возможные значения – xlWorkSheet или xlChart. По умолчанию по-

нимается xlWorkSheet.

Следующая инструкция добавляет лист диаграмм после активного листа:

Sheets.Add After:= Sheets(ActiveSheet.Index), Type:= xlChart

Метод Delete удаляет лист из коллекции листов, например:

Sheets(5).Delete

Excel запросит подтверждение на удаление листа.

Метод Copy создаёт копию листа в той же или другой книге. В следующем примере копия 4-го листа размещается после листа 1.

Sheets(4).Copy after:=Sheets(1)

Вместо аргумента after можно указать аргумент before. Аргументы after и before имеют тот же смысл, что и в методе Add.

Если аргумент after (или before) не указан, выполняется копирование листа в новую книгу:

Sheets("Секрет").Copy

Метод Move перемещает лист в новое место. В следующем примере последний лист передвигается на первое место:

Sheets(Sheets.Count).Move before:=Sheets(1)

Вместо аргумента before можно указать аргумент after.

Очень скрытые листы

Приложение Excel имеет собственные команды для многих операций с рабочими листами и листами диаграмм. Все рассмотренные операции можно выполнить средствами Excel. Разница в том, что команды Excel даются вручную, а программа VBA всё выполняет автоматически. Но есть одна операция с листами, которая средствами Excel не выполняется – это отображение "очень скрытых" листов. В Excel есть возможность сделать лист не просто скрытым, а очень скрытым. Для этого в диалоговом окне свойств листа (окне Properties) свойство Visible устанавливается в значение xlSheetVeryHidden. Для отображения окна Properties в Excel 2007/10 нужно дать команду "Разработчик | Элементы управления | Свойства". В Excel 2003 нужно отобразить панель управления "Элементы управления" и выбрать в ней значок "Свойства". Очень скрытыми могут быть как рабочие листы, так и листы диаграмм.

Очень скрытый лист исчезает из всех команд, которые можно дать в Excel, лист попросту нельзя обнаружить средствами Excel. Чтобы лист стал видимым, нужно изменить его свойство Visible на xlSheetVisible, а это возможно только средствами VBA, причём двумя способами. Один способ реализуется так. В среде VBA в окне Project Explorer нужно выбрать лист, а в окне Properties для свойства Visible выбрать значение xlSheetVisible. Другой способ реализует-

16

Программирование в среде электронных таблиц Microsoft Excel

ся программной инструкцией. Если, например, отображаемый лист имеет имя Secret, то инструкция имеет вид

Sheets("Secret").Visible = True

В программах VBA часто используются именованные константы, встроенные в Excel и в VBA. Имя константы Excel начинается префиксом xl, имя константы VBA – префиксом vb.

xlSheetVisible и xlSheetVeryHidden – константы Excel, vbYesNo

и vbQuestion – константы VBA. Именованные константы имеют прозрачную мнемонику (т.е. имеют ясный смысл) и обычно встречаются в описаниях аргументов встроенных функций. Узнать численное значение константы можно в окне Object Browser.

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

Часть 1. Изучение метода Add коллекции Sheets

Р1. Откройте свою книгу, созданную в работе VBA1. Убедитесь, что программа Workbook_Open работает и на рабочем листе отображается правильная дата.

Р2. Разберите подпрограмму ДобавитьЛист (листинг 4) Листинг 4

Sub ДобавитьЛист(NameNewSheet As String, _ SheetType As Integer)

'Добавление листа в книгу и присвоение ему названия,

'заданного аргументом NameNewSheet.

'Новый лист размещается после активного листа.

'Если лист

с таким названием уже существует, то действие

' программы ограничивается выдачей сообщения.

'SheetType

-- тип добавляемого листа:

'1 - раб. лист, 2 - лист диаграмм

'

 

 

А.Стеценко, 05.06.13.

 

Dim WL

As Object

 

Dim NumSheet As Integer

 

NumSheet

= ActiveSheet.Index

 

On Error

GoTo Lbl

 

Set WL

=

Sheets(NameNewSheet)

 

'Здесь

остаёмся, если нет ошибки, т.е. лист с именем

 

' NameNewSheet есть.

 

MsgBox

"Лист " & NameNewSheet & " уже существует!"

 

Exit Sub

 

 

Lbl:

'Листа с именем NameNewSheet нет – лист можно добавить

 

Select

Case SheetType

 

Case

1

'Добавляется рабочий лист

 

 

 

Sheets.Add after:=Sheets(NumSheet)

 

 

Стеценко А. А.

17

 

 

 

 

 

Case 2

'Добавляется лист диаграмм

 

 

Sheets.Add after:=Sheets(NumSheet), Type:=xlChart

End Select

 

 

ActiveSheet.Name = NameNewSheet

 

End Sub

'end of ДобавитьЛист

 

 

 

 

 

Пояснения к подпрограмме "ДобавитьЛист"

ДобавитьЛист – не главная программа, а подпрограмма, об этом свидетельствуют формальные аргументы NameNewSheet и SheetType, указанные в скобках после имени подпрограммы. Локальная переменная WL имеет обобщённый объектный тип Object, и в инструкции

Set WL = Sheets(NameNewSheet)

ей присваивается соответствие листу с именем, находящемся в переменной NameNewSheet. Если листа с таким именем нет, порождается ошибка времени выполнения. Инструкция

On Error GoTo Lbl

перехватывает ошибку и передаёт управление на метку Lbl. Инструкция Select Case анализирует значение переменной SheetType и выполняет либо ветвь

Sheets.Add after:=Sheets(NumSheet)

либо ветвь

Sheets.Add after:=Sheets(NumSheet), Type:=xlChart

Здесь используется метод Add коллекции Sheets. В первом случае тип листа не указывается, и по умолчанию добавляется WorkSheet, рабочий лист. Во втором случае аргумент Type явно указывает тип листа Chart, листа диаграмм. Аргумент after указывает, что новый лист следует разместить после листа с номером NumSheet. В начале подпрограммы локальной переменной NumSheet присваивается индекс текущего активного листа. Можно было бы обойтись без переменной NumSheet, а номер текущего активного листа указать в методе Add, например:

Sheets.Add after:=Sheets(ActiveSheet.Index)

Выбор варианта программных действий определяется предпочтениями программиста. В подпрограмме сделан упор на простоту и ясность программных действий.

Лист, добавленный методом Add, становится текущим активным, поэтому в инструкции

ActiveSheet.Name = NameNewSheet

имя присваивается именно добавленному листу.

Если в книге уже имеется лист с именем, заданным в аргументе NameNewSheet, подпрограмма ДобавитьЛист с помощью функции MsgBox выдает на экран сообщение, что лист такой-то уже существует и завершает своё выполнение по инструкции Exit Sub. Подробнее функция MsgBox рассматривается в работе VBA12.

18 Программирование в среде электронных таблиц Microsoft Excel

Р3. Составьте главную программу для испытания подпрограммы ДобавитьЛист. За основу можно использовать программу tstAddSheet (листинг 5).

Листинг 5

Sub tstAddSheet() '25.06.13.

Dim NS As String, TS As Integer NS = "Секрет"

TS = 1

Call ДобавитьЛист(NS, TS) End Sub

Р4. Перейдите в среду VBA, вставьте новый модуль, дайте ему имя TestAdd и наберите в нём подпрограмму ДобавитьЛист и разработанную главную программу.

Р5. Дайте команду Debug | Compile VBAProject, чтобы убедиться в отсутствии ошибок времени компиляции. Если ошибки есть и Вы не можете их понять и устранить самостоятельно, обратитесь к преподавателю.

Р6. Испытайте созданный программный комплекс "подпрограмма ДобавитьЛист + главная программа".

Главную программу запускайте в среде VBA, при этом следите за тем, чтобы курсор перед запуском программы находился в пределах главной программы.

Программу можно выполнять в пошаговом режиме, инструкцию за инструкцией; для этого нажимайте клавишу F8. Чтобы запустить программу на выполнение, нажмите клавишу F5.

Выполните:

а) добавьте рабочий лист с именем "Сегодня"; программу выполните в пошаговом режиме (нажимая клавишу <F8>); следите за изменениями в списке объек-

тов листов в окне Project Explorer;

б) добавьте рабочий лист с именем "Секрет" в конец книги; в) добавьте лист диаграмм с именем "График" в конец книги; г) попытайтесь добавить рабочий лист с именем "График";

д) попытайтесь добавить какой-либо лист, задавая для аргумента SheetType значения, отличные от 1 и 2.

Р7. Внесите изменения в программу Workbook_Open, с тем чтобы она выводила приветствие на рабочий лист Сегодня и чтобы этот лист выводился на экран при открытии книги. За основу возьмите программу из листинга 6.

Листинг 6

Sub Workbook_Open()

'

Версия 2

'

А.Стеценко, 12.12.12.

 

Dim sday As String

Стеценко А. А.

19

sday = Format(Now, "dddd, d mmmm yyyy г.") Sheets("Сегодня").Activate

With Range("b1")

.Value = "Сегодня " & sday

.Font.Size = 20

.Font.Bold = True

.Font.Italic = True

.Font.Color = RGB(120, 50, 120)

End With

End Sub

Часть 2. Изучение свойств Count, Index, Name

Р8. Вставьте ещё один модуль VBA, дайте ему имя PropertiesSheeets.

Р9. Составьте программу, выводящую в окно Immediate список всех листов книги с их именами и типами. За основу возьмите программу tstIndexName (листинг 7).

Листинг 7

Sub tstIndexName()

'Выводит список листов в окно Immediate Dim k As Integer

For k = 1 To Sheets.Count

Debug.Print k; Sheets(k).Type, Sheets(k).Name Next k

End Sub

Р10. Выполните программу tstIndexName. Сверьте выдачу в окне Immediate с перечнем объектов Excel в окне Project Explorer и расположением ярлыков листов в окне Excel.

Р11. Составьте и выполните программу, выводящую в окно Immediate список только рабочих листов. Список должен содержать индексы в коллекции Worksheets, индексы в коллекции Sheets и имена листов.

Часть 3. Изучение методов Copy, Move, Delete

Р12. Вставьте ещё один модуль VBA, дайте ему имя MethodsSheeets.

Р13. Составьте программу tstCopy (листинг 8), которая использует метод Copy и создаёт копию листа "Секрет", помещает её в конец книги под именем "БольшойСекрет". Выполните программу tstCopy и убедитесь, что задание выполнено.

Листинг 8

Sub tstCopy()

'Копирует рабочий лист

Sheets("Секрет").Copy after:=Sheets(4)

ActiveSheet.Name = "БольшойСекрет"

Sheets("Секрет").Copy 'Копирование в новую книгу

End Sub

20

Программирование в среде электронных таблиц Microsoft Excel

Р14. Модифицируйте программу tstCopy, чтобы она копировала лист Секрет в новую книгу. Выполните программу и убедитесь, что задание выполнено.

Р15. Составьте программу tstMove, которая использует метод Move и перемещает третий лист в начало книги. Выполните программу tstMove и убедитесь, что задание выполнено.

Р16. Составьте программу tstDelete, которая использует метод Delete и удаляет второй лист из книги. Выполните программу tstDelete и убедитесь, что задание выполнено.

Покажите результаты преподавателю.

Р17. Закройте без сохранения книгу, созданную в п. Р14.

Часть 4. Очень скрытый лист

Р18. Перейдите в окно Excel и сделайте лист "БольшойСекрет" очень скрытым. Для этого выберите заданный лист и отобразите на экране диалоговое окно Свойства (Properties). В Excel 2010 дайте команду Разработчик | Элементы управления | Свойства. В Excel 2003 из контекстного меню любой панели инструментов (щёлкните по ней правой кнопкой мыши) выберите панель инструментов Элементы управления и найдите на ней кнопку Свойства. В окне

Properties выберите для свойства Visible значение xlSheetVeryHidden.

Р19. Убедитесь, что лист "БольшойСекрет" стал невидимым и что его невозможно обнаружить средствами Excel (листа "БольшойСекрет" нет в списке скрытых листов).

Р20. Перейдите в окно VBA и в модуле PropertiesSheeets подготовьте программу с единственной инструкцией

Sheets("БольшойСекрет").Visible = True

Выполните программу и убедитесь, что лист "БольшойСекрет" стал видимым.

Р21. Ещё раз сделайте лист "БольшойСекрет" очень скрытым и убедитесь, что это выполнено.

Р22. Перейдите в окно VBA и в окне Project Explorer выберите лист "БольшойСекрет". В окне Properties (которое находится в окне VBA) выберите для свойства Visible значение xlSheetVisible (если окна Properties нет на экране, нажмите <F4>). Убедитесь, что лист "БольшойСекрет" отобразился.

Покажите результат преподавателю.

Р23. Сохраните и закройте свою книгу, скопируйте её на личный носитель.

Контрольные вопросы к работе VBA3

К1. Объясните понятие "коллекция объектов". К2. Какие объекты входят в коллекцию Sheets?

К3. Все коллекции имеют свойство Count. Как можно пользоваться этим свойством? Можно ли изменять свойство Count?

Соседние файлы в папке VBA (Стеценко)
  • #
    15.09.201752.92 Кб19SergeevA.xlsm
  • #
    15.09.20171.87 Mб45VBA_ЛБ_13v2.pdf
  • #
    15.09.2017799 б16ВосГазСорт.dat
  • #
    15.09.2017799 б16ВоспламГаз.dat
  • #
    15.09.201724.18 Кб18ВосплГаз.xlsm