Литература

Дисциплина "Офисное программирование" изучается в рамках предметной подготовки студентов специальности 05020252 "Информатика" Белгородского педагогического колледжа.

В качестве методической поддержки разработан иллюстрированный курс, в который вошел теоретический материал и практические работы.

Для разработки курса была использована следующая литература:

1. В.А.Биллинг, М.И. Дехтярь , VBA и Office97. Офисное программирование, Русская редакция, М., 1998

2. Т.И. Панфилова, «MS Excel и VBA», Интеллект-центр, М., 2004

3. Хайнц-Герд Райманс, «Вводный курс по VB», К., 1993

4. Т. Л. Истомина, рабочая тетрадь «Первое знакомство с VB», М., Дограф, 2000

5. «Информатика в школе», приложение к журналу «Информатика и образование», №7, 2005.

6. http://mf.grsu.by/Kafedry/kaf001/academic_process/002/VBA


Введение

Этот курс посвящен возможности создания программ, работающих в среде пакета программ Microsoft Office. "Встроенный" во все компоненты пакета программ Microsoft Office Visual Basic for Applications (сокращенно - VBA) является полнофункциональным языком программирования, с помощью которого можно создавать вполне законченные и работоспособные программы. Но самое главное - на VBA могут создавать программы даже те, кто ранее никогда не занимался программированием, причем для этого не потребуются ни толстых книг, ни дорогих курсов обучения.

Язык программирования Visual Basic for Applications вляется результатом пересечения двух ветвей развития информационных технологий, - языка программирования Basic и макроязыков текстовых редакторов, программ работы с электронными таблицами и других приложений.

Basic, язык, чье название является аббревиатурой от английского "Beginner's All-purpose Symboli [image] c Instruction Code" (в переводе - "язык из символьных команд для широкого применения начинающими"), был разработан профессорами американского Дартмутского колледжа Кемени и Курцом в далеком 1965 году.

Для фирмы Microsoft язык Basic имеет особое значение, - в свое время разработка варианта Basic для компьютера Altair 8800 положила начало трудовому программистскому пути ее основателей, Билла Гейтса и Пола Аллена.

С созданием первых версий операционной системы Windows фирма Microsoft стала выпускать и средства разработки программ на Basic'е, предназначенные для этой операционной системы. Однако концепция программирования в новых версиях Basic'а изменилась. Так, среда разработки получила визуальный графический интерфейс - такой же, как и у других приложений Windows (что и послужило поводом для перемены названия языка - теперь он стал именоваться Visual Basic).

Помимо нового интерфейса, в Visual Basic стали использоваться и иные принципы программирования, - объектно-ориентированная модель, ориентированность программы на реакции на события, а не на последовательную работу без вмешательства извне, "дружественность" легкого в разработке графического интерфейса программ.


Все программные компоненты документа объединяются в одно целое и называются проектом

Основы VBA

Все программные компоненты документа объединяются в одно целое и называются проектом. Проект хранится вместе с документом.

Офисные приложения представляют собой совокупность объектов. Объектами являются и сами приложения, и все их компоненты.

Язык VBA – часть среды Office. Он позволяет создавать собственные объекты.

Процедуры и функции – методами объекта. Наряду со свойствами и методами с объектом связывается еще одно понятие – событие.

Итак,

1) переменные определяют свойства объекта;

2) методы определяют его поведение;

3) событие возникает при работе с объектом при определенных действиях пользователя.


Объекты Ехсеl и VBA

Visual Basic поддерживает набор объектов, соответствующих элементам Microsoft Excel, например, объект Workbook представляет книгу, объект Worksheet - рабочий лист, объект Range - диапазон ячеек. Создавая процедуры, управляющие этими объектами, Вы автоматизируете выполнение операций в Microsoft Excel.

Работа с объектом Range

Объект Range представляет отдельную ячейку, диапазон ячеек, целую строку или колонку, несколько выделенных областей или трехмерный диапазон.

Чтобы: | Напишите:
Изменить значение в ячейке А1 на листе Sheet1 | Worksheets("Sheet1").Range( "А1") .Value = 3
Установить формулу для ячейки B1 на активном листе | Range("B1") .Formula = "=5-10*SIN(1)"
Присвоить значение всем ячейкам диапазона С1:ЕЗ на активном листе | Range("C1:E3").Value = 6
Очистить содержимое диапазона А1:ЕЗ на активном листе | Range("A1:E3").ClearContents
Установить полужирное начертание шрифта для диапазона myRange (имя на уровне книги) | Range("myRange"). Font. Bold = True
Присвоить значение всем ячейкам диапазона yourRange (имя на уровне листа) | Range( "Sheet1!yourRange"). Value = 3


Макросы в VBA

Макросы

В VBA есть уникальное средство разработки, не присутствующее больше практически нигде и позволяющее быстро научиться создавать простые программы без использования описаний языка. Это средство - "запись макросов". При работе в любом офисном приложении можно включить специальный режим записи макросов, и тогда все действия пользователя в нем будут автоматически "переводиться" на язык VBA и записываться в виде текста программы. Этот текст можно потом изучить для выяснения синтаксиса и устройства языка, а также необходимым образом его модифицировать.

Для записи макроса в Word надо в [image] ыбрать из меню "Сервис" пункт "Макросы", а затем из выпадающего подменю - пункт "Начать запись".

Каждую программу, хранящуюся в документе, может вызывать на исполнение либо кнопка на панели инструментов, либо сочетание клавиш, либо пункт меню, либо другая программа. Возможно любое сочетание способов вызовов. Поэтому перед началом записи макроса предлагается сразу назначить записываемому макросу способ его вызова.

Если на данном этапе для вызова макроса не будет назначена кнопка или сочетание клавиш, то это всегда можно будет сделать впоследствии с помощью диалогового окна "Настройка".

После нажатия кнопки "Ок" окна назначения способа вызова макросу в окне появится панель "Запись макроса"

В начало


Создание макроса в Microsoft Excel

  1. Запись макросов в приложении Excel.

  2. Выполнение макроса и редактирование макросов.

  3. Назначение макроса графическим изображениям

  4. Удаление макросов из списка

    1) Выполните команду Сервис ~ Макрос ~ Макросы.

    2) Выберите макрос «Цвет_шрифт»

    3) Выберите команду удалить

  5. Ограниченность макросов
     С помощью макроса нельзя сохранить документ, отобразить формы ввода данных и многое другое, поэтому эти ограничения приводят к необходимости создания программ.
  6. Задание 1
  7. Задание 2

В начало


Запись макросов в приложении Excel

Вид ~ Панель инструментов ~ Visual Basic.

Общий алгоритм записи макроса:

ü Нажать на кнопку «Запись макроса» на панели Visual Basic

ü В диалоговом окне «Запись макроса» дать имя макросу.

ü Выполнить действия, которые следует записать.

ü Нажать кнопку «Остановить запись»

Задание:

1) откройте новую книгу;

2) в ячейке А1 введите ваше имя, в ячейку А2 – фамилию, А3 – город, где вы родились, А4 – название страны;

3) установите курсор в ячейке А1;

4) на панели Visual Basic нажмите на кнопку «Запись макроса»;

5) введите название макроса «Цвет_шрифт» и нажмите кнопку «Ok»;

6) Выполните команду Формат ~ Ячейки, перейдите на вкладку Шрифт;

7) установите размер шрифта 18, цвет – зеленый;

8) на панели Visual Basic нажмите кнопку «Остановить запись»

Возврат


Выполнение макроса

1) Установите курсор в ячейку А2.

2) Выполните команду Сервис ~ Макрос ~ Макросы

3) Выберите макрос «Цвет_шрифт» и щелкните по кнопке «Выполнить»

4) Выделите ячейки А3 и А4 и снова выполните макрос «Цвет_шрифт»

Редактирование макросов

1) Для просмотра созданного макроса выполните команду Сервис ~ Макрос ~ Макросы.

2) Выделить макрос «Цвет_Шрифт» и щелкните по кнопке «Изменить».

3) В открывшемся окне изменить макрос, удалив лишние строки, оставив следующее:

Sub Цвет_Шрифт()

With Section. Font

.Size = 18

.Colorlndex = 10

End With

End Sub

4) Закройте окно редактора и вернитесь на лист Excel.

5) В ячейку С4 введите слово Проверка

6) Сделайте С4 активной

7) Запустите макрос на выполнение

Возврат


Назначение макроса графическим изображениям

1) Нарисуйте на листе любую автофигуру.

2) Щелкните на изображение правой кнопкой мыши и выберите команду Назначить макрос.

3) Выберите макрос «Цвет_шрифт»

4) Введите в любую ячейку листа число 500

5) Сделайте ячейку активной

6) Сделайте щелчок по автофигуре

Возврат


Редактор Visual Basic for Applications

Этот редактор вызывается из меню "Сервис"-"Макросы"-"Редактор Visual Basic" или нажатием клавиш Alt-F11.

Окно редактора Visual Basic for Applications состоит из следующих частей: Менеджер проектов (Project Explorer), Окно свойств (Properties Window), Окна текста программ и дизайна форм (Code Window),

Окно отладки (Immediate Window),

Окно контрольного значения (Watch Window),

Окно локальных переменных (Locals Window),

Стек вызова (Call Stack), Окно просмотра объектов (Object Browser).


Средства отладки программы

Редактор VBA обладает очень большими возможностями отладки программы, то есть поиска в ней алгоритмических и языковых ошибок. Поскольку язык VBA - не компилируемый, а интерпретируемый то после завершения написания кода и успешной его отладки программа готова к использованию.

Для запуска на выполнение готовой или записанной программы из редактора VBA необходимо нажать клавишу F5.

В режиме отладки программисту доступны следующие возможности:

1. Пошаговое исполнение программы. Выполняются все команды последовательно, но выполнение каждой команды требует нажатия кнопки F8. Если программа где-то выдает ошибку алгоритма, то можно посмотреть, на каком конкретно этапе это происходит. При пошаговом исполнении в редакторе подсвечивается желтым цветом команда, которая будет выполнена следующей.

2. Просмотр значений переменных. Подведя в режиме отладки курсор к имени любой переменной, можно увидеть ее значение. Кроме того, значения всех переменных программы можно увидеть в окне Локальные переменные (вызов - из меню Вид).

3. Точки останова. Если программа длинная, то проходить по всем ее строчкам с помощью кнопки F8 - занятие не слишком интересное и приятное. В этом случае лучше использовать точки останова, то есть отметки в тексте программы, где ее исполнение должно остановиться, а сама программа - перейти в режим отладки. Для установки точки останова нужно щелкнуть левой кнопкой мыши на сером левом поле окна модуля, и тогда появится коричневая строка с кружочком на месте точки останова.

Начиная с этого места, программа будет выполняться пошагово по нажатию кнопки F8. Отказаться от пошагового выполнения можно путем нажатия кнопки F5. Точки останова полезны, когда нужно локализовать дающее ошибку место в программе, особенно если оно находится в середине текста или не единичное.

4. Окно контрольного значения. В этом окне можно задать определенное выражение, значение которого будет подсчитываться параллельно с выполнением программы. Кроме того, выделив в режиме отладки какое-нибудь выражение и нажав Shift и F9, можно увидеть его значение, а также добавить это выражение в окно контрольного значения и отслеживать его дальнейшие изменения. С помощью этого окна можно отследить, когда, при изменении какого параметра значение выражения станет неприемлемым.

5. Окно проверки или Отладки. Это окно вызывается из меню Вид - Окно отладки. Возможности применения этого окна многообразны. Можно выводить в него сообщения (командой Debug.Print) в случае выполнения или невыполнения какого-либо условия. Можно отображать в нем промежуточные результаты вычислений для контроля их правильности - чтобы не смотреть и искать нужное выражение в окнах Локальных переменных или Контрольного значения, а получать их сразу, перед глазами. Можно даже использовать это окно как маленький калькулятор или командную строку, и тогда при нажатии Enter после ввода команды она будет тут же выполнена! Надо только перед самой командой писать слово Print, если команда должна выдать какой-нибудь результат в этом же окне.

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

Во время работы макрокоманды ее можно прервать в любой момент нажатием клавиш Ctrl и Break. После этого будет возможен переход в режим отладки с места остановки или завершение программы.

Для выхода из режима отладки до завершения полного выполнения программы необходимо выбрать функцию Сброс из меню Запуск или нажать на панели "Отладка" кнопку "Сброс".

В режиме отладки возможен принудительный переход к какой-либо команде для того, чтобы дальнейшее выполнение программы пошло именно с нее. Для этого надо просто перетащить мышкой по серой полосе слева указатель в виде желтой стрелки на нужное место.


VBA

VBA. Основные понятия языка программирования

1. Данные в VBA

1.1. Константы

1.2. Объявление данных

1.3. Типы данных


Константы

Константа объявляется оператором Const. При этом можно указать ее тип, область действия и присвоить ей значение:

Const MyVar = 459
Public Const MyString = "HELP"
Private Const Mylnt As Integer = 5

Если при объявлении константы тип данных явно не указан, то Visual Basic назначает ей тип, который соответствует выражению, присвоенному константе.

Для указания области видимости используются ключевые слова: Public(внутри всех модулей одного приложения) и Private(внутри одного модуля) , а ключевое слово As используется для указания типа.

Возврат


Объявление данных

Переменная объявляется с помощью ключевых слов Dim, Public, Private или Static. Чтобы явно задать тип переменной, используйте ключевое слово As.

Static – объявление локальных переменных

Private I
Dim Amt
Static YourName As String
Public BillsPaid As Currency
Private YourName As String, BillsPaid As Currency
Private Test, Amount, J As Integer

Если переменная объявлена статической, ее значение после выполнения процедуры не сохраняется, и занятая ею память освобождается.

По умолчанию Visual Basic присваивает переменным тип Variant.

Объявление массива аналогично объявлению переменной; при этом тоже используются ключевые слова Dim, Public, Private или Static. Верхние и нижние границы каждой размерности определяются целочисленными значениями, а тип элементов массива задается с помощью ключевого слова As. Прежде чем задействовать массив, Вы должны явно объявить его , неявное объявление массива недопустимо.

Объявляя массив, Вы определяете верхнюю и нижнюю границы каждой размерности в круглых скобках за именем массива. Если Вы указали только одно значение, оно считается верхней границей, а для нижней подставляется значение по умолчанию. Последнее значение равно 0, если только Вы не приравняли его единице оператором Option Base. Приведенные ниже операторы объявляют одномерные массивы, содержащие 15 и 21 элемент соответственно:

Dim counters(14) As Integer

Dim sums(20) As Double

Разумеется, нижнюю границу можно задать явно. При этом значения верхней и нижней границы разделяются ключевым словом То:

Dim counters(1 То 15) As Integer
Dim sums(100 To 120) As String

Здесь индекс counters изменяется от 1 до 15, а индекс sums от 100 до 120.

Возврат


Типы данных

Тип данных определяет множество допустимых значений, которые может принимать указанная переменная .

В VBA имеются основные типы данных , приведенные в таблице

Тип данных | Размер (байт )
Byte (байт ) | 1
Boolean (логический ) | 2 (True или False)
Integer (целое число ) | 2
Long (длинное целое число ) | 4
Single (число с плавающей запятой обычной точности ) | 4
Double (число с плавающей запятой двойной точности ) | 8
Currency (денежный ) | 8
Decimal (масштабируемое целое число) | 14
Object (объект ) | 4
String (строка переменной длины ) | 10+длина строки
String (строка постоянной длины ) | длина строки
Variant (универсальный тип, числовые подтипы ) | 16
Variant (универсальный тип, строковые подтипы ) | 22+длина строки
Тип данных , определяемый пользователем (с помощью ключевого слова Type) | Объем определяется элементами

Описание типа каждой переменной делает программу надежнее и, кроме того, ускоряет ее работу, т.к. в VBA не требуется тратить время на распознавание типа неописанной переменной при каждом обращении к ней.

Переменные, описанные с помощью ключевого слова Dim на уровне модуля, доступны для всех процедур в данном модуле. Переменные, описанные на уровне процедуры, доступны только в данной процедуре. Инструкция Dim предназначена для описания типа данных переменной на уровне модуля или процедуры. Например, следующая инструкция описывает переменную с типом Integer:

Dim N As Integer.

Инструкция Dim предназначена также для описания объектного типа переменных. Далее приводится описание переменной для нового экземпляра рабочего листа

Dim X As New Worksheet.

Если при описании объектной переменной не используется ключевое слово New, то для использования объекта , на который ссылается переменная , существующий объект должен быть присвоен переменной с помощью инструкции Set.

Если тип данных или тип объекта не задан , и в модуле отсутствует инструкция Def Тип , по умолчанию переменная получает тип Variant.

Как и в других языках программирования, в VBA можно использовать массивы. Примеры объявления массивов приведены ниже.

Dim B(3,3) As Single

Dim A(12) As Integer.

Первая строка объявляет двухмерный массив 3*3 (матрицу), состоящий из действительных чисел. Вторая строка объявляет одномерный массив (вектор) из 12 целых чисел , причем по умолчанию первый элемент массива будет А (0), а последний А (11) . В этом случае 0 – базовый индекс . Можно изменить базовый индекс , написав в начале листа модуля инструкцию Option Base 1. После этого индексы массивов А и В будут начинаться с 1. Другим способом изменения базового индекса является использование ключевого слова To при объявлении массива:

Dim B (1 To 3, 1 To 3) As Single

Dim A (1 To 12) As Integer.

Удобным способом определения одномерных массивов является функция Array, преобразующая список элементов, разделенных запятыми , в вектор из этих значений , и присваивающая их переменной тип Variant . Например,

Dim A As Variant

A = Array (10,20,30)

B = A(2)

Возврат


Встроенные функции

Функция – это зависимость одних переменных величин от других.

В языках программирования определены встроенные функции, которые возвращают результат после их вычисления.

Общий вид функции:

Имя функции (аргумент_1, аргумент_2,… аргумент_n)

Функция может иметь один или несколько аргументов.

Функции могут использоваться:

В арифметических выражениях в операторе присваивания
В логических выражениях в условном операторе
y = Sin(x)
y = 2 * Sin(4 * x) + 2
Sin(x) > Cos(y) + 1
Sin(Pi) = 0
Основные группы встроенных функций:
  • •математические функции;
  • •строковые функции ;
  • •функции для работы с датой и временем и случайное число;
  • •функции для преобразования типов данных.


Управляющие конструкции в VBA

1. Управляющие конструкции.

Эти конструкции управляют ходом выполнения программы. В их отсутствие она выполняется последовательно. Но такое допустимо лишь в самых простейших программах. Поэтому любой язык программирования позволяет изменять порядок выполнения операторов за счет ветвления и циклов.

1.1 Операторы ветвления
1.2 Операторы циклов
1.3 Вложение управляющих конструкций
1.4 Выход из циклов и процедур

2. Создание и применение процедур VBA


Операторы ветвления lf

Операторы ветвления lf...Then

Позволяет выполнять один или несколько операторов, если условие истинно. Можно использовать однострочный или блочный синтаксис. Следующий пример иллюстрирует обе формы:

If thisVal < 0 Then thisVal = 0

If
thisVal > 5 Then
thatVal = thisVal + 25
thisVal = 0
End If

В однострочной форме оператор End If не применяется. А если Вы хотите выполнить более одной строки кода, когда опенка условного выражения дает True, Вам нужен блочный вариант , lf...Then...End If.

Примечание: Если в условии содержатся 2 выражения, объединенных операцией Or, например, If (thisVal > 5) Or (thatVal < 9), то проверяются оба выражения, даже если первое уже True. Иногда это влияет на результаты работы оператора; если переменная во втором выражении содержит не верное значение, в период выполнения может возникнуть ошибка.

If. ..Then. ..Else

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

If age < 16 Then
MsgBox "You are not old enough for a license. "
Else
MsgBox "You can be tested for a license. "
End If

lf...Then...Elself

Для проверки дополнительных условий не обязательно вкладывать операторы If...Then друг в друга , можно добавить операторы ElseIf, и тогда Ваш код станет более читаемым и лаконичным. Допустим, Вам нужно рассчитать премии сотрудникам с учетом их вклада в общее дело. Процедура типа Function из следующего примера использует для этого серию операторов ElseIf:

Function
Bonus(jobClass, salary, rating)
If jobClass = 1 Then
Bonus =
salary * 0.1 * rating / 10
ElseIf jobClass = 2 Then
Bonus = salary *
0.09 * rating / 10
ElseIf jobClass = 3 Then
Bonus = salary *
0.07 * rating / 10
Else
Bonus = 0
End If
End Function

Оператор If...Then...ElseIf очень гибок. Вы можете начать с простого оператора If...Then, а потом добавлять операторы Else и ElseIf по мере необходимости. Но если все операторы ElseIf сравнивают одно и то же выражение с разными значениями, лучше воспользоваться оператором Select Case.

Select Case

Оператор Select Case заменяет серию операторов ElseIf в том случае, когда одно выражение сравнивается с несколькими значениями. Он обеспечивает ветвление по условию, аналогичное возможностям оператора If...Then...ElseIf; но делает код эффективнее и читабельнее.

Например, чтобы добавить еще несколько уровней в предыдущий фрагмент кода можно было бы ввести дополнительные операторы ElseIf, однако мы перепишем функцию на основе оператора Select Case:

Function Bonus(jobClass, salary, rating)
Select Case jobClass
Case 1
Bonus = salary * 0.1 * rating / 10
Case 2
Bonus = salary * 0.09 * rating / 10
Case 3
Bonus = salary * 0.07 * rating / 10
Case 4, 5 ' можно включать несколько значений...
Bonus = salary * 0.05 * rating / 5
Case 6 To 8 ' ...или задавать диапазон
Bonus = 150
Case Is > 8 ' ...или сравнивать с другими значениями
Bonus = 100
Case Else
Bonus = 0
End Select
End Function

Заметьте, что в конструкции Select Case вычисляется только одно выражение , в самом ее начале. Оператор If...Then...ElseIf, напротив, позволяет проверять разные выражения в каждом ElseIf. Поэтому оператор If...Then...ElseIf можно заменить оператором Select Case, только если все ElseIf вычисляют одно выражение.

Возврат


Операторы циклов

Do...Loop

Позволяет выполнять блок операторов неопределенное число раз, когда Вам заранее не известно, сколько понадобится итераций. Существует несколько вариантов этого оператора, но в каждом из них проверяется условие и по результатам проверки определяется, надо ли продолжать цикл. Как и в операторе lf...Then, условие должно быть значением или выражением, которое можно вычислить как True или False. Далее мы рассмотрим все вариации Do...Loop. Подробнее на эту тему см. описание оператора Do...Loop в справочной системе.

Do While...Loop

Оператор Do While...Loop позволяет проверить условие перед началом цикла и выполнять цикл до тех пор, пока оно True.

Примечание: Проверяемое в цикле Do While...Loop условие рано или поздно должно стать False, иначе цикл будет бесконечным. Чтобы остановить бесконечный цикл, нажмите клавиши Ctrl + Break.

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

Function CountStrings( longstring, target)
position = 1
Do While lnStr(position, longstring, target) '
возвращает True или False
position =
lnStr(position, longstring, target) + 1
Count = Count + 1
Loop
CountStrings = Count
End Function

Do Until...Loop

Позволяет проверять условие в начале цикла и выполнять цикл, пока оно не станет True. Если проверка с самого начала даст True, операторы в теле цикла пропускаются. Благодаря этому цикл в следующем примере не выполняется, если Response равна vbNo.

Response = MsgBox("Do you want to process more data?", vbYesNo)
Do Until Response = vbNo
ProcessUserData ' вызываем процедуру для обработки данных
Response = MsgBox("Do you want to process more data?", vbYesNo)
Loop

Do...Loop Until

В этой конструкции проверка осуществляется в конце, поэтому цикл выполняется минимум один раз и прекращается, когда условие становится True:

Do
ProcessUserData ' вызываем процедуру для обработки данных
response = MsgBox("Do you want to process more data?", vbYesNo)
Loop Until response = vbNo

For...Next

Если Вам заранее известно, что какой-то блок кода надо повторить определенное число раз, используйте цикл For...Next. В отличие от вариантов оператора Do...Loop, в операторе For...Next применяется счетчик, уменьшаемый или увеличиваемый на каждой итерации цикла. Если разновидности Do...Loop; завершают цикл, как только условие становится истинным или ложным, то цикл For...Next прекращается, когда счетчик достигает заданного значения.

Приведенная ниже процедура Sub генерирует сигнал заданное число раз:

Sub BeepSeveral()
numBeeps = lnputBox("How many beeps")
For counter = 1 To numBeeps
Beep
Next counter
End Sub

По умолчанию (как в этом примере) счетчик увеличивается на каждой итерации цикла на 1. Ключевое слово Step позволяет изменить шаг приращения. Если Вы укажете отрицательное число, счетчик будет уменьшаться на каждой итерации цикла. Например, здесь шаг приращения счетчика равен 2:

Sub ClearArray(ByRef ArrayToClear())
For i = LBound(ArrayToClear) To UBound(ArrayToClear) Step 2
ArrayToClear(i) = 0
Next i
End Sub

For Each ...Next

Цикл For Each...Next похож на For...Next за исключением того, что он повторно выполняет одну и ту же группу операторов для каждого элемента набора объектов или массива. Это особенно полезно в том случае, когда Вам не известно число элементов в наборе или когда их количество может измениться, пока работает Ваша процедура. Вот как выглядит синтаксис оператора For Each...Next:

For Each элемент In группа
операторы
Next элемент

Встретив оператор For Each...Next, Visual Basic:

1. Считает элемент именем первого элемента в группе (если группа не пуста).

2. Выполняет операторы.

3. Проверяет, не последний ли это элемент в группе, и, если да, завершает цикл.

4. Подставляет вместо элемента имя следующего элемента в группе.

5. Повторяет операции, описанные в пп. 2-4.

В следующем примере для Microsoft Excel мы проверяем каждую ячейку текущего региона для ячейки А1 в таблице с именем ,Sheet3, и закрашиваем содержимое ячейки красным цветом, если ее значение меньше -1.

For Each с In Worksheets("Sheet3").Range("A1").CurrentRegion.Cells
If c.Value < -1 Then c.Font.ColorIndex = 3
Next c

А в примере для Word просматриваем все исправления в выделенном тексте и поочередно принимаем их:

For Each myRev In Selection.Range.Revisions
myRev.Accept
Next myRev

Указывать имя переменной после Next (в примере для Microsoft Excel и myRev в примере для Word) не обязательно, но это облегчает восприятие текста программы, особенно при наличии нескольких вложенных циклов For Each.

Внимание: Если Вы хотите удалить все объекты из набора, используйте цикл For...Next, а не For Each...Next. Скажем, чтобы удалить все слайды из текущей презентации PowerPoint:

Set alISlides = ActivePresentation.Slides
For s = alISlides.Count To 1 Step -1
alISlides.ltem(s).Delete
Next

Но код, приведенный ниже, работать не будет , он удалит каждый второй слайд в презентации:

For Each s In ActivePresentation.Slides
s.Delete
Next

Применяя оператор For Each...Next, помните о следующих ограничениях:

в случае наборов элементом может быть переменная типа Variant, Object или конкретного объектного типа из библиотеки объектов, а для массивов , только Variant; оператор For Each...Next не годится для массивов пользовательских типов, так как в переменную типа Variant нельзя записать значение пользовательского типа. Они используются для организации повторного выполнения блоков кода. Операторы циклов, предусмотренные в Visual Basic, описаны в следующей таблице.

Чтобы: | Используйте:
Проверить условие в начале цикла, если оно True, перейти к выполнению цикла и продолжать, пока условие не станет False | Do While...Loop
Проверить условие в начале цикла, если оно False, перейти к выполнению цикла и продолжать, пока условие не станет True | Do Until..Loop
Выполнить цикл один раз, проверить условие в конце цикла и, если оно True, продолжать, пока условие не станет False | Do...Loop While
Выполнить цикл один раз, проверить условие в конце цикла и, если оно False, продолжать, пока условие не станет True | Do...Loop Until
Выполнить цикл заданное число раз, используя счетчик цикла с определенными начальным и конечным значениями, а также шагом приращения | For...Next
Выполнить цикл по разу для каждого объекта из набора(collection) | For Each...Next

Примечание: В Visual Basic есть и оператор While...Wend, но вместо него лучше использовать более гибкие варианты оператора Do...Loop , например, Do While...Loop или Do...Loop While.

Возврат


Вложение управляющих конструкций

Управляющие конструкции можно включать друг в друга, например, вставить блок If...Then внутрь цикла For Each...Next, который в свою очередь находится в другом блоке If...Then и т. д. Такие конструкции называются вложенными.

В следующем примере мы просматриваем заданный диапазон ячеек и подсчитываем число ячеек, содержащих определенное значение:

Function CountValues(rangeToSearch, searchValue)
If TypeName(rangeToSearch) <> "Range" Then
MsgBox "You can search only a range of cells."
Else
For Each с In rangeToSearch.Cells
If c.Value = searchValue Then
counter = counter + 1
EndIf
Next с
EndIf
CountValues = counter
End Function

Заметьте, что первый оператор EndIf закрывает внутренний блок If...Then, а последний оператор End If внешний. По аналогии, в случае вложенных циклов For...Next и For Each...Next операторы Next автоматически применяются к ближайшему предыдущему оператору For или For Each. Вложенные конструкции Do...Loop ведут себя сходным образом.

Возврат


Выход из циклов и процедур

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

Например, осуществляя поиск в массиве в цикле For...Next и найдя нужное значение уже на первой итерации, нет смысла просматривать остальную часть массива, разумнее тут же прекратить цикл и перейти к следующим за ним операторам. Если при выполнении процедуры происходит ошибка, делающая бессмысленным выполнение остальных ее операторов, то, естественно, надо немедленно выйти из процедуры. Вот для таких случаев и предназначены операторы Exit.

Хотя операторы Exit очень удобны, используйте их только при крайней необходимости, а не при нормальном ходе выполнения процедуры или цикла. Злоупотребление операторами Exit затруднит чтение и отладку Вашего кода.

Кроме того, для пропуска части кода можно придумать и более подходящие способы. Например, при поиске значения в массиве внутрь цикла For...Next вместо оператора Exit можно поставить оператор Do...Loop, чтобы поиск шел только до тех пор, пока текущее значение индекса меньше верхней границы массива и значение переменной типа Boolean равно False (см. пример ниже). Когда искомое значение найдено, переменная типа Boolean устанавливается как True, и цикл прекращается.

i = LBound(searchArray)
ub = UBound(searchArray)
foundIt = False
Do
if searchArray(i) = findThis Then foundIt = True
i = i+1
Loop While i <= ub And Not ftoundIt

Для досрочного выхода из оператора Do...Loop используется оператор Exit loop, а для досрочного выхода из цикла For - оператор Exit For:

For Each с In rangeToSearch
if c.Value = searchValue Then
found = True
Exit For
End If
Next

Для досрочного выхода из процедур служат операторы Exit Sub и Exit Function:

For Each c In rangeToSearch
if c.Value = searchValue Then
counter = counter + 1
Elself c.Value = "Bad Data" Then
countValues = Null
Exit Function ' прекращаем проверку и немедленно выходим
End If
Next с

Возврат


Создание и применение процедур VBA

Каждая процедура начинается с оператора объявления процедуры Sub и заканчивается оператором End Sub:

Sub имя _процедуры (аргументы )

<тело процедуры>

End Sub

Оператор объявления процедуры присваивает ей имя, отмечает ее начало и перечисляет аргументы, которые передаются процедуре при вызове из программы. Оператор End Sub отмечает конец процедуры. Все, что расположено между этими двумя операторами, называется телом процедуры и реализует возложенную на процедуру задачу. Список аргументов обеспечивает связь между вызывающей и вызываемой процедурами. Хотя те или иные переменные, объявленные глобальными, доступны обеим процедурам , некоторые специфические переменные должны передаваться и приниматься в качестве списка аргументов .

Существует четыре типа процедур:

1. Общие процедуры.

2. Командные процедуры.

3. Процедуры обработки событий.

4. Функции.

Общие процедуры – это стандартные процедуры Visual Basic, которые, в общем, ничего не изменяют вне своего тела. Они вычисляют переменные, отображают документы передают сообщения другим программам и манипулируют дисковыми файлами.

Командные процедуры расширяют возможности прикладных программ на Visual Basic. Поэтому функционирование таких процедур аналогично выполнению директив меню Excel. Эти процедуры представляют собой записанные действия с таблицей. Командные процедуры обычно не получают никаких аргументов. Если им нужны какие-либо данные от пользователя, они выводят диалоговое окно.

Процедуры обработки событий связаны с конкретными событиями и выполняются, когда эти события происходят. Событие – это нажатие командной кнопки, выполнение директивы меню, открытие или закрытие таблицы Excel, изменение содержимого диалогового окна и т.п. Данные процедуры могут быть также и командными или общими процедурами. Подключение процедуры к событию, например, к командной кнопке, делает ее обрабатывающей событие.

Возврат


Свойства элементов управления

У каждого элемента имеется свое уникальное имя, а также набор свойств. Их можно посмотреть в Окне свойств, выделив элемент и выбрав из контекстного меню правой кнопки мыши пункт "Свойства". Стоит внимательно изучить все возможные свойства для каждого элемента, по возможности осознав их предназначение. При необходимости можно вызвать справку по каждому свойству, поставив на него курсор и нажав F1. Большой набор свойств также имеет сама форма.

С помощью выпадающего меню в Окне свойств можно быстро перейти к свойствам необходимого элемента.

Свойства формы.

Caption.

(название) – задает название окна формы

Name

(имя)- имя формы.

Higth

высота окна

Width

ширина окна

BorberStyle

тип границ

Top

позиция формы относительно верхнего края формы

Left

позиция формы относительно левого края экрана

Общие свойства элементов управления.

Name

имя

Caption

(название) – задает название

Value

значение

Top

позиция относительно верхнего края формы

Left

позиция относительно левого края экрана

Higth

высота

Width

ширина

BackColor

цвет фона объекта

BackStyle

определяет прозрачность фона, 1 – непрозрачен, 0 - прозрачен

ForeColor

Задает цвет переднего фона объекте (текста)

BorberColor

Цвет границы

BorberStyle

тип границ, 0 – нет рамки, 1 - видимая рамка

SpecialEffect

альтернативный вид границ

0 – внешний вид объекта плоский (по умолчанию)

1 – подсвечены верхняя и левая границы, затемнены - правая и нижняя

2 - затемнены верхняя и левая границы, подсвечены - правая и нижняя

3 – углубленная рамка

6 – выделен выступом снизу и справа

ControlTipText

надпись при наведении мыши на объект

Visible

определяет виден или нет объект на экране.

Свойства поведения объекта

Enabled | определяет доступен или нет объект (по умолчанию –True)
TabStop | TRUE – дает доступ к элемента по клавише Tab или Shift+Tab
Locked | TRUE – дает возможность редактирования (по умолчанию - False)

Другие свойства.

TabIndex | порядковый номер элемента управления
ControlSourse | связывает данные документа со значением свойства Value
Tag | текстовый комментарий к объекту
Font | определяет шрифт

CommandButton - командная кнопка

Caption | название кнопки | можно установить при проектировании диалогового окна, а затем менять из программы.
Cancel | кнопка отказа | По умолчанию задается False. Это свойство может быть установлено только для одной кнопки в окне
Default | активизация кнопки | По умолчанию свойству задается значение False.
TakeFocusOnCIick | определяет, переместится ли фокус на данную кнопку после выбора ее щелчком | Иногда для этого свойства удобно установить False, чтобы, щелкнув кнопку, выполнить действие над содержимым элемента, находящегося в фокусе.

TextBox - поле ввода (окно редактирования)

Text

содержит текст, то же значение имеет и свойство Value

MultiLine

False (по умолчанию) — одна строка; True —допускается много строк.

Wordwrap.

Переход на новую строку. Если оно равно True, текст при достижении правой границы поля автоматически переносится на новую строку.

AutoSize

автоматически менять размер, подстраивая его под текст. Имеет смысл устанавливать в True для полей, используемых для вывода информации

MaxLength

максимальную допустимую длину текста

TextLength

возвращает текущий размер текста

LineCount

текущее количество строк в тексте

CurLine

устанавливает или возвращает номер строки редактора, в которой находится курсор

CurХ

задает текущую горизонтальную позицию курсора

CurTargetX

совпадает с CurХ при работе в текущей строке, но сохраняет старое значение при переходе на новую строку в результате нажатия клавиш-стрелок

SelText

возвращает текст, выделенный в поле ввода

SelLength

возвращает его длину

SelStart

определяет начальную позицию выделенного текста


События

События, методы, свойства.

С появлением операционной системы Windows стал широко известным принцип программирования - принцип объектно-ориентированного языка.

Это значит, что основная направленность разработчика сместилась с действия на объект, - на описание на языке программирования реакций этого объекта на действия пользователя, его свойств и их изменений.

Основными понятиями объектно-ориентированного языка являются объект, свойство, метод, событие.

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

Свойство - это любая характеристика объекта. Например, у объекта - первой буквы документа есть свойства: выделение жирным, выделение цветом, подчеркивание, выделение курсивом, регистр и много еще других.

Метод - это какое-либо действие над объектом. Например, печать текста или поиск текста в документе. У многих методов есть параметры метода, позволяющие задать параметры действия.


Элементы управления

1. Label | Поле отображения текста
2. TextBox | Поле ввода
3. ListBox | Список
4. ComboBox | Комбинированный список
5. Checkbox | Флажок
6. OptionButton | Переключатель
7. ToggleButton | Выключатель
8. Frame | Рамка
9.CommandButton | Командная кнопка
10.TabStrip | Набор вкладок
11.MultiPage | Набор страниц
12.ScrollBar | Полоса прокрутки
13.SpinButton | Счетчик
14.Image | Изображение (рисунок)

1. Поле отображения текста - отображает текстовую информацию

2. Поле ввода текста - дает пользователю возможность ввести текстовую информацию, выделить и скопировать ее.

Текст, отображаемый в полях отображения и ввода текста при запуске формы, можно задать как заранее - с помощью Окна Свойств, так и программно.

3. и 4. Несколько видов списков - средства выбора варианта, вроде выпадающего списка шрифтов. Значения элементов списков можно задавать в программе.

5. Флажок - элемент, который независимо от других может находиться в трех состояниях: включенном, выключенном (могут быть определены как пользователем - кликом на флажке, так и программистом) и неактивном (определяется программой).

6. Переключатель - элемент, который также может находиться во включенном, выключенном и неактивном состояниях. В отличие от флажка, переключатели должны быть объединены в группы с помощью элемента рамка - и, если один из переключателей в группе включен, то остальные включены быть не могут.

7. Выключатель. Это кнопка, которая может находиться в нажатом или отжатом состоянии. Например, в Word так себя ведут кнопки создания списков.

8. Рамка. Отображает прямоугольник с заголовком. В основном используется для объединения групп переключателей.

9. Командная кнопка. Обычная командная кнопка вроде "Ok" или "Отмена" в любом диалоговом окне.

10. Набор вкладок и 11. Набор страниц. Представляют из себя набор страничек-вкладок.

12. Полоса прокрутки.

13 Счетчик. Может передавать в программу свое значение с помощью свойства Value. Так же, как и Полоса прокрутки, допускает задание своих минимального и максимального значений, а также шага изменения значения и начальной его величины.

14. Рисунок. В этот элемент можно вставить из файла рисунок, который будет храниться в форме Для вставки самого рисунка нужно после помещения на форму элемента управления Рисунок в Окне свойств выбрать пункт "Picture", нажать на кнопку слева от него и в появившемся окне открытия файла выбрать нужную картинку.


Встроенные диалоговые окна

Диалоговое окно, создаваемое функцией MsgBox служит для вывода на экран сообщения программы и получения от пользователя простой реакции на это сообщение в виде щелчка одной из кнопок окна В простейшем случае эта функция вызывается как процедура. Например,

MsgBox "Сегодня на календаре" & Date

После щелчка кнопки ОК вызов функции завершится, и выполнение программы возобновится с оператора, стоящего непосредственно за этим вызовом.

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

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

Здесь параметр prompt (сообщение) — строковое выражение, его максимальная длина не должна превышать 1024 символов. Разбиение на строки в этом выражении можно производить, используя символ возврата каретки (Chr(13)), символ перевода строки (Chr(10)) или их комбинацию (Chr(13) & Chr(10)).

Числовой параметр buttons (кнопки) задает виды командных кнопок, помещаемых в окне, кнопку, выбираемую по умолчанию, и модальность диалогового окна. Он получается как сумма кодов соответствующих кнопок и свойств. Явно не заданный, этот параметр считается равным 0 Строковое выражение title (заголовок) задает заголовок окна Если его нет, заголовком становится имя приложения (см. пример, приведенный выше, где мы использовали Word). Параметры helpfile (файл справки) и context (контекст) должны присутствовать (или отсутствовать) вместе. Первый из них — имя файла, содержащего справку, которая будет выведена при нажатии клавиши F1, а второй — числовое выражение, задающее номер темы со справкой в этом файле.

Вот коды кнопок и других свойств окна функции MsgBox:

Коды наборов командных кнопок

Имя константы | Код | Описание
VbOKOnly | 0 | только кнопка ОК (Готово)
VbOKCancel | 1 | кнопки ОК и Cancel (Отказ)
VbAbortRetrylgnore | 2 | кнопки Abort (Прервать), Retry (Продолжить) и Ignore (Игнорировать)
VbYesNoCancel | 3 | кнопки Yes (Да), No (Нет) и Cancel
WesNo | 4 | кнопки Yes и No
VbRetryCancel | 5 | кнопки Retry и Cancel

Коды пиктограмм

VbCntical | 16 | важное сообщение (крестик в круге)
VbQuestion | 32 | запрос (вопросительный знак)
VbExclamation | 48 | предупреждение (восклицательный знак)
Vblnformation | 64 | информационное сообщение (i в круге)

Кнопка, выбранная по умолчанию

VbDefaultButtonl | 0 | первая кнопка
VbDefaultButton2 | 256 | вторая кнопка
VbDefaultButton3 | 512 | третья кнопка
VbDefaultButton4 | 768 | четвертая кнопка
Модальность диалога
VbApplicationModal | 0 | модален относительно приложения
VbSystemModal | 4096 | модален относительно системы

Диалоговое окно модально относительно приложения, если для продолжения работы в текущем приложении пользователь должен закончить работу в этом окне (ответить на сообщение). Модальность относительно системы означает, что все приложения будут приостановлены до завершения работы в данном окне.

Может показаться странным, что константа VbDefaultButton4 указывает на четвертую кнопку, хотя максимальное количество кнопок, определяемых кодами от 0 до 5, — три. Дело в том, что некоторые приложения (например, Excel) при наличии параметров справка и контекст могут автоматически добавить в окно кнопку справки Help, вызывающую окно справки.

Результирующее значение параметра buttons получается как сумма кодов по одному из каждой группы. Например, значение 36 = 4 + 32 = VbYesNo + VbQuestion означает, что в окне будет пиктограмма с вопросительным знаком и две кнопки Yes и No, причем первая из них будет считаться выбранной, если пользователь ее щелкнет или нажмет клавишу Enter.

Как узнать, какую кнопку выбрал пользователь? Присвоить значение функции MsgBox некоторой целочисленной переменной и проверить его. Возвращаемые MsgBox значения приведены в таблице:

Имя константы | Значение | Нажатая кнопка
vbOK | 1 | OK
vbCancel | 2 | Cancel
vbAbort | 3 | Abort
vbRetry | 4 | Retry
vblgnore | 5 | Ignore
vbYes | 6 | Yes
vbNo | 7 | No

Если в окне есть кнопка Cancel, нажатие клавиши Esc завершает работу в окне и возвращается тот же код vbCancel, что и при выборе кнопки Cancel

Окно ввода данных. Функция InputBox

Окно, создаваемое функцией InputBox, предназначено для ввода строки и содержит однострочное окно редактирования, сообщение и кнопки ОК и Cancel. При выборе кнопки ОК (или нажатии клавиши Enter) строка, введенная пользователем в окне редактирования, передается в программу; щелчок кнопки Cancel (нажатие клавиши Esc) означает отказ от ввода — InputBox возвращает пустую строку.

Синтаксис вызова функции InputBox таков:

InputBox(promp [, title ] [, xpos] [, ypos] [,helpfile, context])

Здесь параметры рготр(сообщение), title (заголовок), helpfile и context имеют тот же смысл, что и для функции MsgBox. Числовое выражение xpos задает расстояние по горизонтали левой границы окна от левой границы экрана. Если его нет, окно центрируется по горизонтали, ypos — расстояние верхней границы окна от верхней границы экрана. Если его нет, окно центрируется по вертикали.

В следующем примере в окно функции InputBox пользователь должен ввести дату рождения. Далее она проверяется. Если она в интервале от 01.01.1900 до 01.01.1985, запрашивается имя пользователя еще одним вызовом функции InputBox, иначе выдаются информационные сообщения с помощью функции MsgBox. Так как возвращаемое при первом вызове функции InputBox значение — строка, для его преобразования в дату применяется функция DateValue (для преобразования вводимых строк в числовые значения используется функция Val).

Ниже представлен один из возможных диалогов, реализуемых этим фрагментом в случае, когда введенная пользователем дата рождения корректна и вызывается окно для ввода его имени.

Sub exlnput()

Dim Msg As String, Title As String, Name As String

Dim Birthday As Date

Msg = "Введите, пожалуйста, " & Chr(13) & "дату своего рождения."

Title = "Окно для ввода даты"

Birthday = DateValue(InputBox(Msg, Title, 1500, 1000))

If Birthday < "01/01/1900" Then

MsgBox "Вы выглядите гораздо моложе!", vbExclamation

ElseIf Birthday > "01/01/1981" Then MsgBox "Эта программа не для детей до 16!", vbExclamation

Else

Name = InputBox("Здравствуйте! Как Вас зовут?", "Знакомство")

MsgBox Name & ", рады Вам помочь.", vbExclamation, "Проверка ввода"

End If

End Sub


Объект MultiPage

Это элемент управления, объединяющий несколько страниц. Каждая страница – это объект Page.

Свойство Value – определяет номер текущей активной страницы в коллекции.

Свойство SelectdItem возвращает текущую активную страницу.

Свойство Style определяет, в каком виде представлены заголовки

Свойство TabOrientation задает положение полосы с заголовками: вверху, внизу, справа или слева.

Объект OptionsButton

Кнопка-переключатель.

Объект Frame – рамка группы. Служит для видимого объединения в группу нескольких элементов. Кнопки – переключатели, помещенные в рамку, автоматически становятся взаимоисключающими. Поведение других элементов не меняется.


Проект

Проект "Карточка регистрации"

Технология работы

1 этап

  • Откройте новый файл. Присвойте ему имя «Карточка регистрации».

  • Переименуем Лист1 - «Карточка регистрации».

  • Подготовьте форму для карточки регистрации

  • Фамилия, имя клиента будут вводиться вручную в соответствующие поля.

  • Счетчик управляет вводом продолжительности проживания.

  • Заказ завтрака в номер стоит 100 рублей.

  • Стоимость одноместного номера - 1000, двуместного – 2000, люкса – 3000.

  • Пол и тип номера выбираются с помощью элемента управления Переключатель.

  • Наличие паспорта фиксируется Флажком.

  • Наличие кнопки Запись в базу посетителей позволяет отобразить информацию о посетителе в таблице на Листе2.

  • Предусмотреть метку для вывода текущей даты.

2 этап:

Сконструировать таблицу на Листе2. В ячейке L2 вести подсчет посетителей.

3 этап:

Разработать приложение, в котором при открытии книги появляется форма для заполнения. Датой заезда считать текущую дату (функция Date).

Для того, чтобы изменения счетчика были видны, его надо связать с меткой:

Private Sub SpinButton1_Change()

Label1 = SpinButton1.Value

End Sub

После заполнения формы должна нажиматься кнопка Запись в базу, после чего в таблице появляется соответствующая строка, а форма очищается.

.Демонстрация


Создание макроса

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

1
    верста = 500 саженей;
1 сажень = 3 аршина;
1 аршин = 16 вершков;
1 вершок = 44,45 мм.


Проект

Проект «Изменение местоположения окна на экране»

1) Создать форму с 4 командными кнопками, расположенными вверху, внизу, справа и слева.

2) Задать названия кнопкам соответственно, ВВЕРХ, ВНИЗ, ВПРАВО, ВЛЕВО.

3) Двойным щелчком по кнопке ВНИЗ войти в код формы и присвоить значение 200 свойству Top.

Private Sub CommandButton1_Click()

Top=200

End Sub

4) Самостоятельно напишите процедуры для перемещения формы по нажатию на кнопку вправо, влево и вверх.

5) Запустите на выполнение полученное приложение, нажав кнопку Play [image].

6) Изменить программу так, чтобы вставленный объект перемещался по форме.


Проект

Проект "Прогулка котенка"

Создать диалоговое окно, в котором по его поверхности перемещается рисунок по нажатию кнопки «Беги», а по нажатию кнопки «Расти» он увеличивается в размерах.

Демонстрация

рисунок можно скопировать в свою папку


Проект

Проект «Приветствие»

Смоделируем приветствие двух объектов; назовем их условно «You» («Вы») и «Computer» («Компьютер»). Вы здороваетесь с компьютером. На Ваши первые приветствия компьютер не отвечает. Наконец, после третьей попытки он советует никогда не разговаривать с неизвестными и предлагает представиться. После Вашего представления компьютер любезно здоровается с Вами.

Программа, реагируя на события, вызванные действиями пользователя, выдает соответствующие реплики в поля ввода. На определенном этапе диалога пользователь сможет ввести свое имя в поле ввода.

Ход работы:

1. Создайте форму.

2. Выберите свойство (Name) и справа от него введите «Myform».

3. Выберите свойство Caption (Заголовок) и введите в качестве его значения «Hello».

4. Щелкнув его правой кнопкой, выберите в контекстном меню команду Свойства (Properties). В появившемся списке задайте имя (Name) - «m_You»

5. Чтобы в окне редактора можно было записать несколько строк, установите для свойства Multiline значение True.

6. Аналогично, создайте справа еще одно поле ввода с именем (Name) - «m_Comp».

7. Создайте четыре командные кнопки (элементы Command Button). Назовите их «Вы», «Компьютер», «ОК» и «Cancel», изменив для каждой из них свойство Caption в окне Свойства.

8. Вставьте два элемента типа «надпись»: «Поздоровайтесь, коллеги!» и линия, отделяющая основную часть диалога от кнопок его завершения. Задайте новые названия - значения свойства Caption.

9. Дважды щелкните окно формы. Выберите в выпадающем списке объектов слева вверху UserForm, затем в выпадающем списке событий справа вверху выберите строку с событием Initialize (Инициализация). Вы увидите в окне заготовку для процедуры обработки этого события UserForm_Initialize().

10. Объявим над заголовком этой процедуры глобальные переменные нашего проекта:

Count - количество щелчков пользователя кнопки «Вы»,

YourName - переменная, в которую будет передаваться имя пользователя,

InviteDone - признак того, что пользователь получил совет компьютера. А в теле самой процедуры инициализации присвоим им начальные значения.

Dim Count As Integer

Dim YourName As String

Dim InviteDone As Boolean

Private Sub UserForm_Initialize()

Count = 0

YourName = ""

InviteDone = False

End Sub

11. Далее определим действия программы при попытках пользователя поздороваться с компьютером. Каждая попытка - это щелчок кнопки «Вы». Зададим реакцию на это событие. Щелкните дважды эту кнопку и в появившемся окне кода задайте действия следующим образом.

Private Sub CommandButton1_Click()

Count = Count + 1 'количество щелчков по кнопке"Вы"

Select Case Count 'выбор действия в зависимости от Count

Case 1

m_You.Value = "Привет, компьютер!"

Case 2

m_You.Value = "Компьютер, проснись!"

Case 3

m_You.Value = "Поздоровайся, наконец!"

Case Else

m_You.Value = ""

End Select

End Sub

В этой процедуре в зависимости от значения переменной Count (количества щелчков) изменяется текст в окне редактирования m_You (его свойство Value)

12. Затем, дважды щелкнув кнопку «Компьютер», аналогичным образом перейдем к созданию процедуры CommandButton2_Chck(), обрабатывающей нажатие этой кнопки. Пока пользователь не нажмет трижды кнопку «Вы», компьютер молчит. Затем он «просыпается» и выводит в свое окно редактирования совет дня, а при следующем щелчке считывает имя пользователя и приветствует его.

Private Sub CommandButton2_Click()

Dim s1, s2 As String

s1 ="Совет дня. Никогда не разговаривайте с неизвестными! "

s2 ="Ваше имя, пожалуйста."

If Count >= 3 Then 'после 3-х щелчков по кнопке "Вы"

If Not InviteDone Then 'совет еще не давался
m_Comp.Value = s1 & s2 'вывод совета
m_You.Value ="" 'чистка редактора

nviteDone = True

Else 'совет уже дан

YourName =m_You.Value 'ответ (имя) пользователя

If YourName ="" Then YourName ="Люди" 'имя по умолчанию

m_Comp.Value = YourName & "! Всегда рад с Вами работать!"

End If

End If

End Sub

Отметим, что в результате этой процедуры «внешняя» переменная YourName получит в качестве значения имя пользователя (его ответ на совет дня или значение по умолчанию).

13. Теперь нам осталось запрограммировать реакции кнопок «ОК» и «Cancel». При щелчке первой диалоговое окно будет закрываться (для этого вызывается метод Hide), а при щелчке второй, кроме того, будет чиститься переменная YourName.

Private Sub CommandButton3_Click() 'щелчок по "ОК"

Myform.Hide

End Sub

Таким образом, при выходе из диалога по нажатию кнопки «ОК» глобальная переменная YourName сохраняет полученное в диалоге значение. В следующей процедуре она его теряет.

Private Sub CommandButton4_Click() 'щелчок по "Cancel"

YourName =""

Count = 0

Myform.Hide

End Sub

14. Запустить приложение и проверить в работе.

15. Автоматический вызов программы при загрузке приложения

В окне «Проект» в проекте Рrоjес1(Приветствие) откроем папку «Microsoft Word Объекты» и выберем в ней ThisObject. Далее, чтобы попасть в окно редактора программы, можно щелкнуть значок «Программа» слева вверху окна «Проект» или выбрать команду «Программа» в контекстном меню. В списке объектов слева вверху окна редактора выбираем объект Document и справа в списке событий — Open. В появившуюся заготовку процедуры Document_Open() добавляем оператор Myform.Show, открывающий диалоговое окно Myform.

Private Sub Document_Open()

Myform.Show

End.

Чтобы приписать кнопке картинку, нужно задать значение свойства Picture. В строке с этим свойством имеется значок «...», щелчок по которому вызывает окно поиска нужного файла с картинкой. После этого вручную или автоматически (включив свойство AutoSize) следует подобрать подходящий размер кнопок. Кроме того, мы добавили еще одну кнопку с картинкой рукопожатия. При проектировании ее свойство Visible было выключено (значение False). Поэтому она не видна в начале диалога. Кнопка появляется, когда состоится знакомство. Для этого мы добавили в процедуру CommandButton2_Click одну строку перед последними двумя End If

m_Comp.Value = YourName & "! Всегда рад с Вами работать!"

CommandButton5.Visible = True

Далее Вы можете самостоятельно модифицировать и улучшать этот проект. Добавьте, например, процедуру обработки события, связанного с нажатием новой кнопки.

Демонстрация


Проект

Проект «Кроссворд»

Ход работы

  1. Разработать на Листе1 кроссворд.
  2. Добавить 2 командные кнопки «Ваша оценка» и «До свидания!»
  3. На Листе3 поместить ответы на задания кроссворда и вспомогательную информацию.

    Столбец А – номер по порядку

    Столбец B - ответы

    Столбец C – номер строки начала ответа

    Столбец D - номер столбца начала ответа

    Столбец E – признак: 1 – слово по горизонтали, 0 – слово по вертикали.

  4. Описать процедуры обработки событий.

4. 1 Щелчок по кнопке «Ваша оценка»

Private Sub CommandButton1_Click()

fio = InputBox("Введите свою фамилию", "Кроссворд")

s = 0: s1 = 0: ball = 1

For i = 1 To 9

sl$ = "": x = Лист3.Cells(i, 3)

y = Лист3.Cells(i, 4)

For j = 1 To Len(Лист3.Cells(i, 2))

If Лист3.Cells(i, 5) = 1 Then sl$ = sl$ + Лист1.Cells(x, y + j - 1) Else sl$ = sl$ + Лист1.Cells(x + j - 1, y)

Next j

If sl$ = Лист3.Cells(i, 2) Then s = s + 1

Next i

If s <> 0 Then ball = Fix(5 * s / 9) Else ball = 1

Лист 1.Cells(15, 4) = ball

Open "Паскаль1" For Append As #1 'запись в файл оценки

Print #1, fio, ball, Date

Close #1

End Sub

4. 2 Щелчок по кнопке «До свидания!»

Private Sub CommandButton2_Click()

Лист1.Cells(15, 4) = ""

For i = 4 To 11

For j = 2 To 12

If Лист1.Cells(i, j) <> "" Then Лист1.Cells(i, j) = ""

Next j, i

Application.ThisWorkbook.Save

Application.Quit

End Sub

Демонстрация


Проект

Проект «Тест»

Инструкции по конструированию формы.

1. Создать форму.

2. В нижней части формы вставить командную кнопку и метку на одном уровне. Название командной кнопки – Баллы:, название метки очистить.

3. Вставить в форму объект MultiPage и добавить столько страниц, сколько вопросов (навести мышь на вкладку, сделать правый щелчок и выбрать NewPage).

4. Вставить на каждую страницу объект Frame и в него объект Label для вопроса и столько объектов OptionsButton, сколько вариантов ответов.

5. Вписать в метку вопрос, в кнопки-переключатели варианты ответов.

6. Анализ ответов сделать по нажатию командной кнопки.

В процедуре проверить у кнопок-переключателей с правильными ответами свойство Value. Если его значение истинно, значит, выбор ответа правилен и балл увеличивается на 1. Для накапливания баллов использовать переменную. После обработки всех ответов, значение переменной преобразовать в строку и поместить в метку на форме, которая находится на одном уровне с командной кнопкой.

7. Отладить процедуру.

Демонстрация


Белгородский педагогический колледж

Иллюстрированный курс

по

офисному программированию

для студентов школьного отделения,

обучающихся по специальности 05020252

"ИНФОРМАТИКА"

Составитель:

Авдеева Е.В.

Белгород - 2007


Математические функции

Возврат


Строковые функции

Возврат


Функции для работы с датой и временем

Date() - функция не имеет аргументов и возвращает текущую дату.

Time() - функция также не имеет аргументов и возвращает текущее время.

Year(date) - функция возвращает год по дате.

Month(date) - функция возвращает номер месяца по дате.

Случайное число

RND(n) - функция возвращает случайное число в диапазоне от 0 до числа n.

0 £ RND(n) < n

Возврат


Функции преобразования типов

Возврат


Задание 1

1) Откройте Лист2 в книге.

2) Введите в диапазон А1:А6 любые числа.

3) Создайте макрос для очистки диапазона А1:А6.

4) С помощью автофигур создайте кнопку «Очистка» и назначьте ей макрос.

5) В диапазон С2:С6 введите фамилии ваших друзей.

6) В диапазон D2:D6 занесите их телефоны.

7) Создайте две кнопки с названиями «Выделенное скопировать» и «Вставить».

8) Откройте Лист3 и в столбец А введите фамилии и телефоны через пробел.

9) Разнесите фамилии и телефоны по столбцам С и D:

§ Выделите данные в столбце А

§ Выполните команду Данные ~ Текст по столбцам

§ Укажите формат данных с разделителем и нажмите Далее

§ Установите для каждого столбца текстовый формат.

§ В поле «Поместить в» укажите С1 и нажмите Готово

10) Создайте макрос для разбора данных по столбцам.

11) Создайте макрос для очистки ячеек, в которые заносятся разобранные данные

Возврат


Задание 2

1) Создайте четвертый лист в книге.

2) Подготовьте таблицу:

Товар

Модель №

Название

Стоимость

Цена

Количество

Сумма

3) Заполните ее на свое усмотрение данными, так чтобы было два вида товара, например, ксероксы и факсы.

4) Отсортируйте таблицу по столбцу Товар

5) Подсчитайте на какую сумму было продано отдельно ксероксов и отдельно факсов

§ Установить курсор в любую ячейку отсортированной таблицы.

§ Выполнить команду Данные ~ Итоги. В списке «При каждом изменении в:» выбираем Товар, в списке «Операция» - Сумма, в списке «Добавить итоги по:» - Сумма

§ Нажмите кнопку Ok

6) Создать макрос «Итоги»

7) Создать макрос «Убрать итоги»

Возврат


Демонстрация работы программы

Демонстрация выполнения работы

Возврат


Демонстрация работы программы

Возврат