Vba(Visual Basic for Application)

Вид материалаДокументы

Содержание


Первый способ
Второй способ
VBA (Visual Basic for Applications)
Редактор программного кода
Обратите внимание
Полный синтаксис
OK, Cancel
Возвращаемые значения-константы функции MsgBox
Занятие 3 Операторы ветвления
Внимание!!! Все программы пока запускаем кнопкой с листа.
Объявляем переменную строкового типа
Новое в теории
Внесем некоторое усовершенствование
Select Case
Синтаксис следующий
Итак, краткие итого по теме занятия
Инициализация массива в цикле, вывод значений в диалоговое окно
Arr(5) мы получаем массив из 6 строк. Самостоятельно
Двумерный массив
Инициализация в цикле двумерного массива
...
ссылка скрыта
Подобный материал:
VBA(Visual Basic for Application)

  1. Заняие 1
  2. Занятие 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 и т.п.

Редактор программного кода — это, по сути, обычный текстовый редактор, и в нем вы вполне можете вырезать и вставлять код, перетаскивать его, скопировать путем перетаскивания с нажатой клавишей  — в вашем распоряжении почти все те же возможности, что и в редакторе Word. Однако он все-таки предназначен для специализированной задачи — создания кода программы.

Прежде чем начать работать с редактором Visual Basic, нужно его открыть. Во всех приложениях Office это делается одинаково:
  • самый простой способ: в меню Сервис выбрать Макрос -> Редактор 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



Задание


Написать процедуру, о заполнении списка спортсменов, но добавить:
  1. Подсчет листов в книге
  2. Заполнение списка организовать с помощью конструкции 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. Самостоятельно на занятии

Задача: Добавление данных в список.

На рабочем листе есть список (придумываете сами), Вам необходимо добраться до последней записи и в следующую пустую ячейку внести новую запись.


Ссылки по теме «Циклы»


ссылка скрыта

ссылка скрыта

ссылка скрыта