Vba(Visual Basic for Application)
Вид материала | Документы |
- Нижегородский Государственный Университет им. Н. И. Лобачевского Н. А. Устинов Microsoft, 1290.46kb.
- Отчеты в ms access, 447.2kb.
- Краткий курс по изучению языка программирования Visual Basic, 357.37kb.
- Даний курс призначений для тих, хто: ніколи не програмував, але хоче навчитися, 360.9kb.
- Н. Г. Волчёнков программирование на visual basic 6 Учебное пособие, 128.99kb.
- Тема урока: Массивы в Visual Basic, 35.5kb.
- Программа дисциплины visual Basic для приложений дпп. В. 01 Для специальности, 141.22kb.
- Язык Visual Basic имеет разнообразные средства визуализации разрабатываемых приложений., 41.17kb.
- Опис модуля назва модуля: Visual Basic для додатків. Код модуля, 40.19kb.
- Лекція 18 "Інформатика та комп'ютерна техніка" Тема Мова програмування Visual Basic, 127.14kb.
VBA(Visual Basic for Application)
- Заняие 1
- Занятие 2
Независимо от используемой операционной системы и программных приложений пользователь часто выполняет одни и те же последовательности команд для многих рутинных задач. Вместо повторения последовательности команд каждый раз, когда необходимо выполнить какую-либо задачу, можно создать макрос (набор команд), который будет выполнять эту последовательность. Макросы позволяют вводить одиночную команду, выполняющую ту же задачу, для реализации которой было бы необходимо вводить несколько команд вручную.
Записанные макрорекордером последовательности команд первоначально назывались макрокомандами. Сейчас этот термин сократился до более простого слова — макрос. Применительно к информатике и программным приложениям под словом макрос всегда подразумевается макрокоманда.
Макрорекордер (или просто "рекордер") записывает все действия пользователя, включая ошибки и неправильные запуски. Когда программа воспроизводит макрос, она выполняет каждую записанную рекордером команду точно в такой последовательности, в которой она выполнялась во время записи. VBA(Visual Basic for Application) можно использовать для улучшения макросов, записанных макрорекордером, значительно повышая их мощь и возможности. С помощью VBA можно создавать пользовательские меню, диалоговые окна и панели инструментов.
Занятие 1. Запись макроса в Excel.
Пусть необходимо, чтобы макрос работал с любой выделенной ячейкой или диапазоном ячеек, поэтому стартовыми условиями для этого макроса являются открытая рабочая книга с выделенным диапазоном ячеек в активном рабочем листе.
Запустите Excel. Откройте файл «Lesson1.xls».
Задача: надо записать макрос, который выбирает полужирный шрифт Arial 12-го размера и применяет это форматирование к любой ячейке или диапазону ячеек текущего выделенного фрагмента.
1. Для запуска макрорекордера в Excel, назначения имени макросу, выбора места для сохранения нового макроса и выбора дополнительных опций надо выполнить следующее:
- Выбрать команду "Сервис-Макрос-Начать запись"; появится следующее диалоговое окно:
- В текстовом окне "Имя макроса" в качестве имени макроса ввести - ArialBold12. Такое имя позволит запомнить, что выполняет макрос;
- В поле "Описание" добавить следующий текст: Форматирует выделенные ячейки Arial, Bold, 12;
- Список "Сохранить в" следует использовать для выбора места, в котором будет сохранен записанный макрос. Доступными вариантами являются: "Личная книга макросов", "Новая книга", "Эта книга". Т.к. необходимо, чтобы этот макрос был доступен во всех рабочих книгах, надо выбрать "Личная книга макросов";
- Если будущий макрос планируется использовать довольно часто, можно назначить для его запуска горячую клавишу;
- Для начала записи макроса необходимо нажать кнопку "ОК".
Внимание:
По умолчанию панель "Остановить запись" в Excel содержит две командные кнопки.
Левая кнопка - кнопка "Стоп"; служит для завершения процесса записи макроса. Правая кнопка - кнопка "Относительная ссылка". По умолчанию Excel записывает абсолютные ссылки на ячейки в макросы. Если, например, начать запись в выделенной ячейке А5, а затем выделить ячейку справа от А5, т.е. В5, то записанный макрос также будет выделять ячейку В5.
Если нажать кнопку "Относительная ссылка", Excel запишет относительную ссылку на ячейку каждый раз, когда выделяется какая-либо ячейка. Если выделенной в данный момент является ячейка А5 и выбирается ячейка справа от нее во время записи с относительными ссылками, то Excel записывает, что была выделена ячейка, находящаяся на 1 столбец и 0 строк правее от текущей выбранной ячейки. Когда макрос будет запущен, то он выделит ячейку, находящуюся непосредственно справа от активной ячейки.
Вспомнить: что такое относительные и абсолютные ссылки!!!
2. После этого макрорекордер необходимо остановить, нажав кнопку "Стоп" на панели "Остановить запись". Либо выбрать команду "Сервис-Макрос-Остановить запись".
Наш новый макрос в Excel теперь закончен и готов к выполнению
3. Просмотр кода макроса.
Выберите команду "Сервис-Макрос-Макросы", появится окошко со всеми записанными Вами макросами. Выберите нужный Вам макрос и нажмите кнопку «Изменить».
Появится окно кода в редакторе Microsoft Visual Basic.
4. Выполнение макроса.
Первый способ:
Выполните команду "Сервис-Макрос-Макросы" выберите свой макрос «Выделенный текст» и нажмите кнопку «Выполнить», не забывая при этом про стартовые условия.
Второй способ:
«Включите» на панели инструментов «Панель рисования», нарисуйте любую геометрическую фигуру, нажмите правую кнопку мыши и в контекстном меню выберите «Назначить макрос», выберите свой макрос и нажмите «ОК». Снимите фокус с Вашей геометрической фигуры, щелкнув на любой ячейке рабочего листа. Наведите опять курсор на фигуру, он примет форму руки — т.е. активен и готов к выполнению Ваш макрос.
Задание:
- проделать вышеописанные действия и получить работающий макрос. Запускать его двумя способами.
- В макросе Excel использовать вставку системных функций (например Дата), изменение цвета, толщины границ ячеек.
- В Excel записать макрос, имитирующий Штамп, т.е., например:
преобразовать код макроса таким образом, чтобы «печать» можно было поставить в любую активную ячейку (рамку можно не учитывать)
- Записать макрос копирующий с Листа на Лист.
Занятие 2
Цель занятия: научиться редактировать макрос, записанный макрорекордером для получения самостоятельно работающей программы, выполняющей некоторые «разумные» действия.
Сразу обращаю Ваше внимание, мы пока не занимаемся отловом ошибок, и предполагаем , для сегодняшнего занятия, что на листе записаны только числовые значения.
Несколько слов об изучаемом языке.
Во многих ситуациях макрорекордер очень удобен, но в реальной работе только им обойтись невозможно. Слишком много не умеет макрорекордер: он не умеет проверять значения, чтобы в зависимости от него выполнить какое-либо действие, не работает с циклами, не умеет перехватывать и обрабатывать ошибки. Макросы, которые созданы в макрорекордере, очень ограничены с функциональной точки зрения. Полностью возможности программирования в Office раскрываются при использовании редактора Visual Basic
VBA (Visual Basic for Applications) — это диалект языка Visual Basic, расширяющий возможности Visual Basic и предназначенный для работы с приложениями Microsoft Office. Язык VBA встроен в приложения Office (и не только), и код на языке VBA можно хранить внутри документов приложений Office — документах Word, книгах Excel, презентациях PowerPoint и т.п. В настоящее время VBA встроен:
— во все главные приложения MS Office — Word, Excel, Access, PowerPoint, Outlook, FrontPage, InfoPath;
— в другие приложения Microsoft, например, Visio и M icrosoft Project;
— в более чем 100 приложений третьих фирм, например, CorelDraw и CorelWordPerfect Office 2000, AutoCAD и т.п.
Редактор программного кода — это, по сути, обычный текстовый редактор, и в нем вы вполне можете вырезать и вставлять код, перетаскивать его, скопировать путем перетаскивания с нажатой клавишей
Прежде чем начать работать с редактором Visual Basic, нужно его открыть. Во всех приложениях Office это делается одинаково:
- самый простой способ: в меню Сервис выбрать Макрос -> Редактор Visual Basic;
- самый быстрый способ: нажать
+ ;
- можно также воспользоваться кнопкой на панели инструментов Visual Basic (предварительно сделав ее видимой);
- можно вызвать редактор при возникновении ошибки в макросе;
- можно открыть готовый макрос на редактирование в диалоговом окне Макрос.
- можно также воспользоваться кнопкой на панели инструментов Visual Basic (предварительно сделав ее видимой);
VBA объектно-ориентированный язык. В редактор кода встроено множество средств, которые облегчают жизнь разработчику. Самое полезное средство — это получение списка свойств и методов объекта. Пользоваться им очень просто: если включен автоматический показ (он включен по умолчанию), достаточно впечатать имя объекта и за ним — точку. Получение список констант (то есть допустимых значений для данного свойства) также появляется автоматически после того, как вы впечатаете знак равенства (=).
Переменная - это имя, которое программист дает области компьютерной памяти, используемой для хранения данных какого-либо типа.
Для лучшего понимания переменной можно провести аналогию, скажем, с автоматической камерой хранения на вокзале. Ячейки камеры, как известно, пронумерованы - это "имя" переменной (в отличие от камеры хранения, мы можем сами присваивать определенное имя переменной). То, что лежит в ячейке камеры хранения - это значение переменной. Оно может меняться, но номер ячейки (имя переменной) остается одним и тем же.
При выборе имени переменной необходимо соблюдать определенные правила, вот некоторые из них:
- Имя переменной должно начинаться с буквы алфавита;
- Имена переменных не могут содержать пробелы, точку или любой другой символ, который VBA использует для обозначения математических операций и операций сравнения;
- Имена переменных не могут превышать 255 символов;
Следует отметить (на будущее), что при реальном программировании наиболее удобно пользоваться не этими стилями, а именами ячеек. Тогда работа с вашей ячейкой похожа на работу с обычной переменной. Для того, чтобы дать имя ячейке наведите на неё курсор. Выберите меню Вставка -> Имя -> Присвоить. Появится диалоговое окно, куда надо ввести имя и нажать кнопочку OK.
После присваивания имени вы введите число в эту ячейку, а в другой создайте формулу, например =MyСell+10.
Задание
1. Записать макрорекордером макрос «Форматирование», который будет производить форматирование выделенных ячеек в числовой формат.
2. Перейти в редактор VBA. «Макрос — Макросы — Изменить». Исправить код записанного макроса таким образом, чтобы форматирование применялось к любому выделенному фрагменту рабочего листа. Вспомните для этого объект Selection, который мы рассматривали в коде на первом занятии.
Обратите внимание:
Любая процедура начинается с ключевого слова Sub за которым следует имя Вашей процедуры и круглые скобки и заканчивается ключевыми словами End Sub. Между этими двумя строчками расположен код Вашей процедуры.
3. Записать второй макрос (процедуру) непосредственно в редакторе Visual Basic. Это макрос будет осуществлять вызов диалогового окна для запроса действий от пользователя.
В VBA для взаимодействия с пользователем предусмотрены VBA-процедуры: MsgBox — как функция для получения выбора от пользователя в ответ на сообщения или вопросы, которые отображает процедура (или проще говоря, вывод информации пользователю),
InputBox — позволяет получать информацию от пользователя посредством диалоговых окон ввода.
Откройте редактор VBA. «Сервис — Макрос — Редактор Visual Basic. Появиться окно редактора кода. Выполните команду “Insert — Modul”. Таким образом Вы добавите собственный макрос (модуль).
Напишите следующий код в окне редактора:
(то, что написано зеленым цветом писать не надо, это комментарии (пояснения) к Вашему коду).
Sub wind()
‘объявляем переменную s типа String (строковая). Синтаксис объявления переменной всегда такой: Dim имя переменной As тип данных
Dim s As String
‘ в переменную записываем значение которое пользователь введет в строку
s = InputBox("Введите Вашу фамилию")
‘ Отвечаем пользователю
ans =MsgBox ("Привет" & " " & s, vbYesNo)
End Sub
& — знак конкатенации (объединения строк), т.е. «Вася» & « » & «Иванов» это Вася Иванов. Обратите внимание — пробел тоже вручную включаем в строку.
В приведенном примере результат возвращаемого функцией значения (какая кнопка нажата vbYes или vbNo будет записан в переменную ans (это будет число, соответствующее выбранной кнопке).
Полный синтаксис функции MsgBox выглядит так:
MsgBox(Текст[,кнопки] [,заголовок окна] [, файл справки, метка в файле справки]). Аргумент «Текст» или «Prompt» является обязательным, т. к. отображается в заголовке диалогового окна.
У MsgBox() можно отображать разное кол-во кнопок ( OK, Cancel, Abort, Retry, Ignore, Yes, No), и можно вводить реакцию пользователя на нажатие этих кнопок. (см. Таблицу).
В нашем примере мы говорим, что в нашем диалоговом окне надо отобразить 2 кнопки: Yes и No.
констАргументы-константы функции MsgBox Таблица 1
Константа | Назначение |
vbAbortRetryIgnore | Отображает командные кнопки Стоп, Повтор, Пропустить |
vbApplicationModal | Для продолжения работы с приложением пользователь должен ответить на запрос диалогового окна. |
vbCritical | Отображается окно с предупредительным значком критической ошибки. |
vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4 | Номер командной кнопки в диалоговом окне являющейся кнопкой по умолчанию. |
vbExclamation | Желтый знак вопроса. Используется для отображения важной информации не требующей ответа. |
vbInformation | Отображает значок информации. Используется для отображения справочной информации. |
vbMsgBoxHelpButton | Добавляет к диалоговому окну кнопку Справка. При щелчке на этой кнопке открывается файл, который задан в аргументе HelpFile, в разделе, заданном аргументом Context. |
vbOKCancel | Отображает кнопки ОК и Отмена. |
vbOKOnly | Отображает только кнопку ОК - аналогична пропуску аргумента Buttons. |
vbQuestion | Отображает значок вопроса. Используется когда надо задать пользователю какой-то важный вопрос. |
vbRetryCancel | Отображает кнопки Повтор и Отмена. |
vbSystemModal | Диалоговое окно всегда остается впереди других окон пока не будет закрыто. |
vbYesNo | Отображает кнопки Да и Нет. |
vbYesNoCancel | Отображает кнопки Да, Нет и Отмена. |
Возвращаемые значения-константы функции MsgBox Таблица 2
Константа | Назначение |
vbAbort | Пользователь выбирает кнопку Стоп |
vbCancel | Пользователь выбирает кнопку Отмена |
vbIgnore | Пользователь выбирает кнопку Пропустить |
vbNo | Пользователь выбирает кнопку Нет |
vbOK | Пользователь выбирает кнопку ОК |
vbRetry | Пользователь выбирает кнопку Повтор |
vbYes | Пользователь выбирает кнопку Да |
Допишите в макрос строчку (перед словами End Sub):
MsgBox (ans)
Запустите макрос, проверьте его работу.
================================================================
Занятие 3 Операторы ветвления
Введем реакцию на нажатие кнопок диалогового окна.
Для этого необходим оператор ветвления, его синтаксис следующий:
(ключевые слова написаны синим цветом):
If условие Then
действия
ElseIf условие Then
действия
Else
действия
End If
Если заданное условие истинно, то выполняются действия, следующие за оператором Then , если ложно то — те, что после Else.
Оператор ElseIf задает множественное ветвление. Если у Вас всего два варианта выбора, то этот оператор не обязателен.
Оператор ElseIf задает множественное ветвление. Если у Вас всего два варианта выбора, то этот оператор не обязателен.
Пример:
If 4 >2 Then
MsgBox(“Yes!!!”)
Else
MsgBox(“No!!!”)
End If
Естественно, что если Вы запустите этот код на исполнение , то выполнятся будет всегда первое действие.
Пример реакции на действия пользователя (вместо многоточия Вы сами должны что-то написать):
…..
sstr=MsgBox(“Hello выполнить сложение?”, vbYesNo)
If sstr = vbYes Then
MsgBox (a+b)
Else
MsgBox ("Ничего не сделано!!!")
End If
……..
Количество ветвлений, т.е. конструкций
If условие Then
действия
ElseIf условие Then
действия
Else
действия
End If
как мы и рассматривали на занятии может быть любым.
Задание
1. Создайте новый модуль.
Назвать можно так, как Вам хочется. Пропишите в нем следующие действия:
— вызов диалогового окна InputBox с предложением ввести в окно какое арифметическое действие Вы хотите произвести, например:
— Ответ — MsgBox с несколькими кнопками, например:
далее — в коде реакция на нажатие определенной кнопки:
………
Для того, чтобы выбрать какие кнопки будут отображаться и какая на них будет реакция см. таблицы 1 и 2.
2.
— вызов диалогового окна InputBox с предложением ввести в окно какое-то число
— вызов другого диалогового окна InputBox с предложением ввести в окно какое-то число
— используя оператор ветвления:
1. сравнить введенные два числа
Внимание! когда Вы пишите s = InputBox("…….") в переменную s записываются данные типа String , с которыми Вы не можете производить никаких арифметических действий. Чтобы Вы могли работать с данными как с числами их надо привести к определенному типу. Делается это с помощью встроенных функций языка, будем пользоваться функциями CInt (приводит к целому) CDbl (приводит к вещественному).
Т.е. чтобы в переменной s оказалось целое число надо написать:
s = CInt( InputBox("……."))
а чтобы вещественное
s = CDbl ( InputBox("……."))
2. Разделить большее на меньшее
3. Выдать MsgBox с результатом.
4. Попробуйте провести операцию сложения без приведения типов данных.
5. Мини задача: Объем карты памяти …… — задаете сами через диалоговое окно
объем одной фотографии….. — аналогично, вопрос сколько фотографий поместится на карту? Напишите соответствующую программу.
Внимание!!! Все программы пока запускаем кнопкой с листа.
Занятие 4
1. Повторение пройденного.
Уже изучены следующие синтаксические конструкции языка:
| Синтаксис | Пример или описание |
Ветвление | If условие Then действия Else действия End If | Если заданное условие истинно, то выполняются действия, следующие за оператором Then , если ложно то — те, что после Else. |
Множественное ветвление | If условие Then действия ElseIf условие Then действия Else действия End If | Если заданное условие истинно, то выполняются действия, следующие за оператором Then , если ложно то — те, что после ElseIf и в конце концов то, что после Else. |
Объявление переменных | Dim имя переменной As тип данных | Объявляем переменную строкового типа: Dim s As String типа дата: Dim str As Date целого типа: Dim tr As Integer типа «ячейка»: Dim rng As Range |
Диалоговые окна | InputBox MsgBox | В переменную записывается значение, введенное пользователем в диалоговое окно: s = InputBox("Введите Вашу фамилию") В переменную записывается значение того, какая кнопка выбрана в диалоговом окне: ans = MsgBox(“Yes!!!”, vbYesNo) или просто «ответ» без кнопок. |
Конкатенация | & — знак конкатенации (объединения строк) | «Вася» & « » & «Иванов» это Вася Иванов. |
Новое в теории: понятие «метка», оператор GoTo, свойство Offset, понятие Exit Sub — выход из процедуры, работа с листами рабочей книги.
1. Организуем «учет» спортсменов на соревновании: вводите в диалоговое окно массу спортсмена, получаете ответ, к какой весовой категории он относится, далее следующее диалоговое окно с вопросом продолжать ли опрос и т. д.
Вам потребуется логическая операция объединения:
неравенство 0 < s < 100 записывается в программе как: s > 0 And s < 100.
Пишите код множественного ветвления:
если масса спортсмена 0 < и < 100 то MsgBox(«легкий вес»)
если масса спортсмена 100 < и < 130 то MsgBox(«средний вес»)
если масса спортсмена 130 < и < 160 то MsgBox(«тяжелый вес»)
если масса спортсмена 160 < то MsgBox(«супертяжеловес»)
и все время спрашиваете, продолжать ли опрос. Для этого нам понадобятся понятия «метка» и оператора GoTo .
Оператор GoTo — это оператор безусловного перехода, когда ход выполнения программы без проверки каких-либо условий перепрыгивает на метку в коде. Пример применения GoTo может выглядеть так:
GoTo EngineNotStarted
…
EngineNotStarted :
MsgBox "Едем на метро"
…
или
…
5 :
MsgBox "Едем на метро"
…
GoTo 5
EngineNotStarted: , 5:— это метки (место куда перейти, какой-то адрес в программном коде). Для них используется имя (выбираемое по правилам назначения имен для переменных), которое оканчивается на двоеточие.
Иногда использование GoTo очень удобно — например, когда нам нужно добиваться от пользователя ввода правильного значения неизвестное число раз. Однако использование GoTo категорически не рекомендуется, потому что код становится трудночитаемым.
Ваш код при использовании метки будет выглядеть так:
……….код
5:
……….код
tr = MsgBox("Long?", vbYesNo)
If tr = vbYes Then
GoTo 5
Else
Exit Sub
End If
…………….
2. Внесем некоторое усовершенствование в код, так, чтобы создаваемый список записывался на рабочий лист нашей книги.
— Для этого нам понадобится свойство Offset.
Свойство Offset возвращает объект Range. Offset применяется только к объекту Range и ни к какому другому. Данное свойство использует единственный синтаксис: объект.Offset(сдвиг_строки, сдвиг_столбца) Два аргумента свойства Offset соответствуют смешению относительно левой верхней ячейки указанного диапазона Range. Эти аргументы могут быть положительными (сдвиг вниз или вправо), отрицательными (вверх или влево) или нулевыми. В приведенном ниже примере значение 12 вводится в ячейку, которая находится под активной ячейкой: ActiveCell.Offset(l,0).Value = 12.
Напишите новую процедуру «Сдвиг», для того, чтобы понять работу свойства Offset:
например:
Sub sdvig()
s = CInt(InputBox("Enter number"))
ActiveCell.Value = s
ActiveCell.Offset(0, 1).Activate
ActiveCell.Value = s + 1
ActiveCell.Offset(1, 1).Activate
ActiveCell.Value = s + 2
ActiveCell.Offset(1, -1).Activate
ActiveCell.Value = s + 3
End Sub
Запустите код на выполнение, объясните результат.
Задание
Дополнить код таким образом, чтобы в одном столбце печаталась фамилия, в другом введенный вес, в третьем категория.
Занятие 5
Конструкция Select Case
Конструкция Select Case является альтернативой конструкции If . . . Then . . . Else в случае выполнения блока, состоящего из большого набора операторов. Конструкция Select Case предоставляет возможность, похожую на возможность конструкции If . . . Then . . . Else, но в отличие от нее она делает код более читаемым при наличии нескольких вариантов выбора.
Конструкция Select Case работает с единственным проверяемым выражением, которое вычисляется один раз при входе в эту конструкцию. Затем VBA сравнивает полученный результат со значениями, задаваемыми в операторах Case конструкции. Если найдено совпадение, выполняется блок операторов, ассоциированный с оператором Case:
Синтаксис:
Select Case проверяемое_выражение
Case список_выражений1
[блок_операторов1]
Case список_выражений2
[блок_операторов2]
. . .
Case Else
[блок_операторовn]
End Select
Разберем это на примере.
Добавьте в свой проект новый модуль.
Sub menu()
sstr = InputBox("Введите одно из названий времен года")
Select Case sstr
Case "лето"
MsgBox ("Каникулы!!!")
Case "весна"
MsgBox ("Все цветет")
Case "осень"
MsgBox ("Уналая пора...")
Case Else
MsgBox ("Ух, холодно!!!")
End Select
End Sub
Запустите процедуру на выполнение.
Если Вы хотите использовать операторы сравнения в этой конструкции, то синтаксис будет следующий:
Select Case sstr
Case Is<100
…..
Case Is>100
….
Case Else
………..
End Select
т.е. используем ключевое слово Is в качестве объекта, описывающего, что сравниваем.
или можно так:
…..
Case 0 To 5
……
при использовании диапазона (0 To 5) включаются и границы диапазона (в данном случае 0 и 5).
или
…..
Case 4,6,1
…..
т.е. разделяя критерии для сравнения запятыми.
Цикл For …. Next
Циклы позволяют выполнить одну или несколько строк кода несколько раз. Когда число повторений известно заранее, используют цикл For …… Next.
Синтаксис следующий:
For x = k To N Step ….
……
действия
…….
Next
Объяснения: для х начиная с k до N с шагом … (по умолчанию шаг равен 1 и слово Step можно не писать), шаг это число на которое будет увеличиваться х при каждом проходе цикла (итерации), выполняйте следующие действия …., и так до тех пор, пока значение х не станет равным N.
х — счетчик цикла, шаг цикла может быть как положительным, так и отрицательным.
k, N значения начала и конца цикла.
Объекты VBA: рабочая книга и рабочий лист
Workbooks(«book»).Activate
Worksheets(«sheet»).Activate
Для тог, чтобы получить номер строки и столбца активной ячейки надо воспользоваться следующими формулами:
r = ActiveCell.Row 'строка
cn = ActiveCell.Column 'столбец
Пример использования цикла For …… Next
Sub Lists()
Workbooks(«book»).Activate
‘считаем количество листов в рабочей книге
n = Worksheets.Count
‘в цикле идем по всем листам, активируем их по очереди и в ячейку A1 на каждом ‘листе пишем значение х при данном шаге цикла
For x = 1 To n
Worksheets(x).Activate
Range("A1") = x
Next x
End Sub
Итак, краткие итого по теме занятия:
book = Application.ActiveWorkbook.Name | Записываем в переменную имя активной рабочей книги |
sheet = Application.ActiveSheet.Name | Записываем в переменную имя активного рабочего листа |
Worksheets.Add | Добавляем лист в рабочую книгу |
ActiveSheet.Name = "MyList" | Даем имя активному рабочему листу (переименование аналогично, см. выше) |
Worksheets("Лист1").Activate | Активируем рабочий Лист с определенным именем |
n= Worksheets.Count | Считаем количество листов в книге |
Worksheets("Лист1").Delete | Удаляем лист с определенным именем |
ThisWorkbook.SaveAs ("prov.xls") ThisWorkbook.Save | Сохранение рабочей книги как prov.xls Сохранение рабочей книги |
For x = k To N Step …. …… действия ……. Next | Цикл For …. Next |
Задание
Написать процедуру, о заполнении списка спортсменов, но добавить:
- Подсчет листов в книге
- Заполнение списка организовать с помощью конструкции Select Case
3. Вы работаете в туристическом агентстве.
Вам необходимо ежедневно заполнять таблицу, в которой по горизонтали будет стоять продолжительность экскурсии, по вертикали — стоимость за час, а сама таблица будет автоматически заполняться: стоимость за час — …, продолжительность — …., экскурсия стоит — …..
Пусть все величины дискретны, т.е. Вы запрашиваете максимальную продолжительность — это будет конец цикла, минимальную продолжительность — это будет начало цикла и шаг, и аналогично, максимальную и минимальную стоимость.
Подсказка (разбор кода) здесь.
Занятие 6
Массивы
Индексный массив (в некоторых языках программирования также таблица, ряд) — именованный набор однотипных переменных, расположенных в памяти непосредственно друг за другом (в отличие от списка), доступ к которым осуществляется по индексу.
Массив — это объект данных, в котором хранится несколько единиц данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.
Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д. Одномерный массив нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.
Одномерные
Объявление массиа
Dim неделя (1 To 7) – одномерный массив неделя состоит из семи элементов типа Variant;
Dim Группа (1 To 25) As String – для одномерного массива Группа резервируется 25 строк переменной длины;
Пример простой инициализации массива:
Sub weeks()
Dim w(1 To 7) As String
w(1) = "понедельник"
w(2) = "вторник"
w(3) = "среда"
w(4) = "четверг"
w(5) = "пятница"
w(6) = "суббота"
w(7) = "воскресенье"
MsgBox w(2)
End Sub
Самостоятельно:
Измените этот код таким образом (введите цикл), чтобы по значению (например "понедельник") выдавался номер элемента массива.
Инициализация массива в цикле, вывод значений в диалоговое окно
Sub Massiv()
'объявление
Dim Arr(5) As Integer
'Dim Arr(5) As Single
'вычисляем нижнюю и верхнюю границы массива
k = LBound(Arr)
n = UBound(Arr)
Randomize
d = ""
'MsgBox (k)
'MsgBox (n)
For i = k To n
Arr(i) = Rnd()
'выводим массив в строковую переменную
d = d + CStr(Arr(i)) + Chr(13)
Next i
'выводим массив в диалоговом окне
MsgBox (Chr(13) & d)
End Sub
Обратите внимание!!! При объявлении массива Arr(5) мы получаем массив из 6 строк.
Самостоятельно
Вывести массив на рабочий лист.
Пользоваться получением номеров строки и столбца активной ячейки
Двумерный массив
Объявление:
Dim A(20,10) As Integer – двумерный массив целых чисел, составленный из 20 строк по 10 элементов в каждом;
Dim Mult (0 To 5, 0 To 7) As Integer - двумерный статический массив целых чисел, включающий 6*8=48 элементов.
'вычисляем нижнюю и верхнюю границы массива по каждой из размерностей (строки, столбцы)
k = LBound(Mult, 1)
k1 = UBound(Mult, 1)
n = LBound(Mult, 2)
n1 = UBound(Mult, 2)
Инициализация в цикле двумерного массива:
Sub exampl()
Dim Ar(5, 7) As Single
Dim i, j As Integer
For i = 0 To 5
For j = 0 To 7
Ar(i, j) = InputBox(i & "," & j)
Next j
Next i
End Sub
Вывод двумерного массива на рабочий лист.
Sub test()
Dim arr(2, 2) As Integer
n = ActiveCell.Row
k = ActiveCell.Column
For i = LBound(arr, 1) To UBound(arr, 1)
For j = LBound(arr, 2) To UBound(arr, 2)
arr(i, j) = i * j + 12
Cells(n, k) = arr(i, j)
n = n + 1
Next j
Next i
End Sub
Можно прямо в коде программы изменять размерность массива. Для этого используется ключевое слово ReDim.
Ссылки по теме:
ссылка скрыта
ссылка скрыта
ссылка скрыта
rod.ru/TiutorVBA.php">
Занятие 7. Неопределенные циклы
Существуют два основных способа создания неопределенного цикла. Можно построить цикл так, что VBA будет тестировать некоторое условие (детерминант цикла) либо перед выполнением цикла, либо - после выполнения цикла.
2.1.
Цикл Do .. While
Конструкция цикла, тестирующая свое условие детерминанта до выполнения цикла.
Синтаксис:
Do While Condition
Statements
Loop
Condition - логическое выражение для детерминанта цикла
Statements - один, ни одного или несколько операторов, которые составляют тело цикла
Loop - ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла для проверки условия
VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно True.
При выполнении цикла Do While сначала тестируется логическое выражение (Condition); если оно равно True - выполняется тело цикла. При достижении ключевого слова Loop управление опять передается в начало цикла и снова проверяется логическое выражение. Так происходит до тех пор, пока логическое выражение не станет False. Когда логическое выражение становится False - управление передается оператору, следующему за ключевым словом Loop.
Обратите внимание! Если логическое выражение равно False при первом выполнении цикла Do While, то управление сразу передается оператору, следующему за Loop, а операторы, находящиеся в теле цикла соответственно пропускаются. Другими словами говоря, цикл Do While позволяет ни разу не выполнять операторы внутри него.
Пример:
Элементарный цикл Do While, подсчитывающий сумму цифр от 1 до 15:
Sub test()
i = 1
summ = 0
Do While i <= 15
summ = summ + i
i = i + 1
Loop
MsgBox summ
End Sub
Запустите на выполнение, объясните результат.
2.2.
Цикл Do .. Until
Еще один цикл, тестирующий условие детерминанта до выполнения цикла.
Синтаксис:
Do Until Condition
Statements
Loop
Condition - логическое выражение для детерминанта цикла
Statements - один, ни одного или несколько операторов, которые составляют тело цикла
Loop - ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла для проверки условия
VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно False.
В остальном цикл Do Until полностью аналогичен циклу Do While.
Самостоятельно приведите пример на использование цикла.
Для тестирования условий после выполнения тела цикла надо поместить логическое выражение в конец блока операторов, составляющих тело цикла, после ключевого слова Loop, которое сообщает о конце цикла.
2.3.
Цикл Do .. Loop While
Конструкция цикла, тестирующая свое условие детерминанта после выполнения цикла.
Синтаксис:
Do
Statements
Loop While Condition
Condition - логическое выражение для детерминанта цикла
Statements - один, ни одного или несколько операторов, которые составляют тело цикла
Loop - ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла после проверки условия
VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно True.
При выполнении цикла Do Loop While сначала выполняются операторы тела цикла, затем по достижении ключевого слова Loop тестируется логическое выражение (Condition); если оно равно True - управление передается в начало тела цикла и цикл повторяется снова. Так происходит до тех пор, пока логическое выражение не станет False. Когда логическое выражение становится False - управление передается оператору, следующему за строкой Loop While...
Обратите внимание! Даже если при первом выполнении цикла Do Loop While логическое выражение равно False тело цикла всё равно будет выполнено. Другими словами говоря, независимо от значения логического выражения, представленного с помощью Condition, этот цикл всегда выполняется, по крайней мере, один раз.
Пример, использующий цикл Do Loop While для подсчета цифр от 1 до 15
Sub test3()
i = 1
summ = 0
Do
summ = summ + i
i = i + 1
Loop While i <= 15
MsgBox summ
End Sub
Чтобы лучше понять разницу между циклами с «пред» и «пост» условиями (п. 2.1 и 2.3) задайте начальное значение i в обоих циклах равным 16. Объясните результат.
2.4.
Цикл Do .. Loop Until
Еще один цикл, тестирующий условие детерминанта после выполнения цикла.
Синтаксис:
Do
Statements
Loop Until Condition
Condition - логическое выражение для детерминанта цикла
Statements - один, ни одного или несколько операторов, которые составляют тело цикла
Loop - ключевое слово, указывает на окончание тела цикла и обозначает место, из которого VBA возвращается в начало цикла после проверки условия
VBA выполняет цикл пока логическое выражение, представленное с помощью Condition, равно False.
В остальном цикл Do Loop Until полностью аналогичен циклу Do Loop While.
Приведите самостоятельный пример.
Сравните данный цикл с циклом Do .. Until, приведите пример, объясняющий разницу в постановке условий.
3. Самостоятельно на занятии
Задача: Добавление данных в список.
На рабочем листе есть список (придумываете сами), Вам необходимо добраться до последней записи и в следующую пустую ячейку внести новую запись.
Ссылки по теме «Циклы»
ссылка скрыта
ссылка скрыта
ссылка скрыта