Порядок выполнения работы




1. Откройте созданную вами рабочую книгу Excel. Скопируйте свою таблицу на новый лист. Удалите в ней все формулы.

2. Определите и, при необходимости, задайте формат ячеек таблицы в соответствии с требованиями вашей задачи.

3. Скопируйте созданный вами макросв окне редактора кода, удалите все внутренние операторы, оставив только его заголовок и последний оператор End Sub. Измените название процедуры (макроса).

4. Задайте режим обязательного объявления переменных, для чего выше заголовка вставьте строку Option explicit.

5. Напишите коды объявления внутренних переменных своей программы и задайтесь их типом данных. Прокомментируйте их в тексте программы.

6. Напишите коды программы считывания исходных данных из таблицы Excel во внутренние переменные программы VBA. Прокомментируйте их в тексте программы.

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

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

9. Запустите созданную программу в режиме отладки командами Debug, Step Into. На каждом шаге выполнения контролируйте изменение внутренних переменных программы в окне локальных переменных Locals. Убедитесь в правильности выполнения расчетов. При выполнении фрагментов программы, обеспечивающих запись рассчитанных значений в ячейки Excel, дополнительно убедитесь в правильности выполнения этих действий.

10. Удалите в таблице Excel результаты вычислений и проверьте работоспособность программы в режиме Debug, Run To Cursor. Проконтролируйте значения в окне локальных переменных Locals. Введите точки останова командой Debug, Toggle Breakpoint и убедитесь в правильности работы программы.

11. Проверьте правильность комментариев с учетом изменений в тексте программы, дополните и, при необходимости, скорректируйте их.

Контрольные вопросы

1. Как связаны между собой типы данных Excel и VBA?

2. В чем необходимость использования данных типа Long и Double?

3. Как можно использовать тип данных Type?

4. Как явно объявить переменную в тексте программы?

5. Какие слова в языке программирования называются ключевыми?

6. В чем недостатки метода объявления переменной по умолчанию?

7. Как включить режим обязательного явного объявления переменных?

8. Чем массив отличается от обычной переменной?

9. Как можно использовать возможности динамического объявления размера массива?

10. Как можно использовать свойство Cells() для организации обмена данными между Excel и VBA?

Отчет о работе

Подготовьте отчет о выполненной лабораторной работе. Он должен содержать титульный лист и текст написанной вами программы с построчным комментарием ее действий. Сформулируйте выводы, которые можно сделать по результатам выполненной работы.

Программирование на VBA

Лабораторная работа №4

Операции и операторы VBA

Методические указания

Под программированием обычно понимают процесс составления упорядоченной последовательности действий, реализующей алгоритм[1] решения некой задачи. Язык описания этой последовательности может быть самым различным. Так, например, может быть создано описание алгоритма в виде конструкции обычного разговорного языка (построить, вычислить, перевезти, обеспечить). С другой стороны, алгоритм может быть сформулирован в терминах элементарных арифметических операций. Очевидно, что если предполагается выполнять программу на ЭВМ, то эта последовательность должна быть разработана с учетом возможностей компьютерной реализации. Размер элементарных действий алгоритма определяется возможностями их последующей обработки. Поскольку в общем случае программирование ЭВМ сводится к заданию последовательности команд ее процессора, то в степень детализации алгоритма может быть доведена до уровня команд процессора.

Документирование алгоритмов можно вести разными способами. На практике наибольшее распространение получило их графическое представление. При составлении рисунков алгоритмов программ необходимо пользоваться стандартными обозначениями. Некоторые из них приведены на рис. 3 и имеют следующий смысл:

· Процесс – действия, приводящие к изменению данных.

· Предопределенный процесс – выполнение ранее созданного алгоритма.

· Решения – действия, приводящие к изменению последовательности выполнения операторов программы.

· Ввод – вывод – действия по вводу – выводу информации на внешние устройства.

· Пуск – останов – точки начала и конца алгоритма.

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

· Модификация – действия по изменению кодов ранее созданной программы.

· Класс, объект – соответственно обозначения класса и объекта.

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

Рис. 3. Некоторые обозначения, используемые при записи алгоритмов

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

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

Операция‑ инструкция языка программирования, которая однозначно обрабатывается компилятором в виде генерации стандартной последовательности кодов процессора. В английской версии Help-системы VBA они именуются как Operators. В качестве участников операции (операндов) могут выступать константы и переменные. Если в одном выражении используется несколько операций, то порядок их выполнения определяется приоритетом (чем меньше номер, тем выше приоритет и раньше выполняется операция). Если операции имеют одинаковый приоритет, то они выполняются слева направо. При необходимости, последовательность выполнения операцийможет регулироваться круглыми скобками (сначала выполняются действия в скобках). Хотя многие операции реализованы во всех языках программирования, их конкретный набор, а также обозначения в разных языках программирования разный, что во многом затрудняет одновременное использование различных языков программирования из-за повышения вероятности ошибки кодирования. Поэтому, несмотря на кажущуюся внешнюю простоту вопроса, требуется тщательный анализ существующих в конкретном языке программирования операций и их обозначений.

Арифметические операцииязыка VBA реализованы в виде стандартного общеупотребительного набора. Они могут быть выполнены с числовыми данными любых типов и используют привычные обозначения. К их числу относятся операции, представленные в табл. 3. Результатом выполнения арифметической операции является число, которое может использоваться в последующих операциях.

Таблица 3. Арифметические операции языка VBA.

Операции Приоритет Название Пример записи Если A=11и B=5, то результат
-   Смена знака -A -11
+   Сложение A+B  
-   Вычитание A-B  
*   Умножение A*B  
/   Деление A/B 2.2
\   Целочисленное деление A\B  
Mod   Остаток от деления по модулю A Mod B  
^   Возведение в степень A^B  

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

Логические операцииреализуют алгебру Буля. В качестве операндов операции могут выступать константы или переменные. При анализе выполнения логических операций следует принимать во внимание то обстоятельство, что утверждение ложь в вычислительной технике обычно кодируется кодом 0, а истина кодом, отличным от нуля (например, 1, 2, и тому подобное). Очевидно, что, как и в случае операций сравнения, результатом вычислений является логическое утверждение истина или ложь. Список и правила выполнения логических операций представлены в табл. 5.

Язык VBA поддерживает две операции со строками– сцепление и сравнение (табл. 6). Операция сцепления строк позволяет создавать новую строку, состоящую из строк операндов. Результатом ее выполнения является строка символов. А вот операция сравнения строк возвращает значение истина в том случае, когда первый операнд удовлетворяет условиям, заданным в виде некоторого шаблона и представленного вторым операндом, и ложь, если условие, заданное шаблоном, не удовлетворяется. Сам шаблон представляет собой строку символов, имеющих определенный смысл. Если в строке шаблона присутствует символ алфавита, то результат сравнения строк будет истина только в том случае, если на том же месте в исходной строке стоит такой же символ. При необходимости вместо одного символа можно указать диапазон. Наличие символа # в позиции строки шаблона означает, что в исходной строке на том же месте должна стоять цифра. Символ? в шаблоне разрешает находиться на соответствующей позиции рабочей строки любому другому символу.

Таблица 4. Операции сравнения языка VBA.

Операции Приоритет Название Пример записи Если A=11и B=5, то результат
<   Меньше A<B False
>   Больше A>B True
<=   Меньше и равно A<=B False
>=   Больше и равно A>=B True
<>   Не равно A<>B True
=   Равно A=B False
Is   Сравнение со ссылкой на объекты Dim A,B,C,D,E Set A=D Set B=D Set C=E F=A Is B F=A Is C     True False

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

В целом оператор – это конструкция более высокого уровня, чем операция. В его состав могут входить аргументы, константы, переменные, операции и другие операторы. Таким образом, оператор самостоятельная конструкция языка программирования, которая может быть отдельно откомпилирована и выполнена в виде заранее определенной последовательности кодов процессора. В английской версии Help-системы VBA операторы именуются как Statements.

Таблица 5. Логические операции языка VBA.

Операции Приоритет Название Пример записи Если A=True B=True C=False D=False, то результат
And   Логическое умножение (и) A And B A And C C And B C And D True False False False
Or   Логическое сложение (или) A Or B A Or C C Or B C Or D True True True False
Xor   Исключающее или A Xor B A Xor C C Xor B C Xor D False True True False
Not   Отрицание E=Not B E=Not D False True
Imp   Импликация A Imp B A Imp C C Imp B C Imp D True False True True
Eqv   Эквивалентность A Eqv B A Eqv C C Eqv B C Eqv D True False False True

Таблица 6. Операции со строками языка VBA.

Операции Приоритет Название Пример записи Если A=”abc”,B=”123”, C=”a?*”,то результат
&   Сцепление строк A&B ”abc123”
Like   Сравнение строк A Like C True

Язык VBA содержит весь базовый набор операторов классического языка Бейсик с добавлениями, учитывающими потребности объектно-ориентированного программирования. Операторы записываются на отдельных строчках и могут не нумероваться. Для размещения нескольких операторов на одной строке между ними необходимо поставить символ двоеточие (:). Этот же символ используется для обозначения меток. Для переноса продолжения оператора на следующую строку используется комбинация символов пробел знак подчеркивания (_). Нельзя разбивать переносом идентификаторы и строки. Допускается не более семи переносов строк одного оператора.

Оператор объявления переменных. Основные идеи, связанные с типами данных, были уже рассмотрены выше. Здесь приводится формальное описание оператора объявления переменных в языке VBA Dim, имеющего следующий синтаксис:

Dim [WithEvents] ИмяПеременной [(Индексы])] [As [New] Тип]

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

Одним оператором Dim можно описывать несколько переменных. В качестве обозначений используются:

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

Индексы – размерности массивов, задаваемые в формате

[Нижний To] Верхний

По умолчанию нижний индекс считается равным 0.

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

Тип – тип переменной в соответствии с табл. 2.

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

Оператор присваивания обеспечивает занесение информации в ячейки памяти, связанные с идентификатором и имеет символ равенства (=). Необходимо обратить внимание на то обстоятельство, что в отличие обычного равенства, которое выполняется всегда, оператор присваивания имеет динамические свойства (зависит от времени). При его выполнении результат вычислений правой части оператора заносится в ячейку памяти, указанную слева от знака равенства, число в которой имело одно значение до выполнения оператора и другое после его выполнения. Задавая последовательность операторов присваивания, мы можем программировать запись данных в ячейки памяти ЭВМ. Поэтому для его обозначения в алгоритме лучше всего подходит символ процесс (рис. 3). Синтаксис оператора имеет вид

[Let] Идентификатор = Выражение

Пример 11. Несколько операторов присваивания, производящих вычисления с использованием операций

j=1 ‘В ячейку j записывается 1

j=j+1 ‘Считывается число из ячейки j (там была 1), и к этому числу добавляется 1. ‘Результат (число 2) снова записывается в ячейку j

К_выдаче = Начисленно - Начисленно*Ставка_налога ‘Предполагается, что в ячейки

‘Начисленно, Ставка_налога заранее были занесены значения (например, предыдущими 'операторами присваивания). Извлекается число из ячейки Начисленно и запоминается.

‘Извлекается число из ячейки Ставка_налога. Выполняется операция умножения.

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

‘Полученная сумма заносится в ячейку К_выдаче

Язык VBA предусматривает работу с так называемыми объектами. При работе такие переменные должны быть специально объявлены. Объектные переменныерассматриваются как указатели (адреса ячеек памяти) на объект. Для записи значения в указатель (ссылки на объектную переменную) используется ключевое слово Set. Синтаксис оператора в этом случае:

SetОбъектнаяПеременная = [New] ОбъектноеВыражение

или

Set ОбъектнаяПеременная = Nothing

Примечание. Указателем называется ячейка памяти, предназначенная для хранения адреса другой ячейки памяти.

Ключевое слово New используется при создании нового экземпляра класса, а ключевое слово Nothing позволяет освободить системные ресурсы (память) от объекта, который в дальнейшем использоваться не будет.

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

Оператор условия If Then Else EndIfпредназначен для выбора последовательности выполнения других операторов программы. Такая ситуация возникает в том случае, когда, в зависимости от конкретной ситуации, требуется выполнить одну или другую ветви алгоритма. Сама ситуация задается в виде так называемого условия, в состав которого могут входить константы и идентификаторы, а также различные операции с ними. Выполнение оператора начинается с вычисления условия, которое может принимать значения истина или ложь. Синтаксис оператора имеет вид:

If Условие Then [Операторы1] [Else: Операторы2] Endif

Если Условие принимает значение True, выполняются операторы, размещенные в тексте программы после ключевого слова Then до ключевого слова Else, иначе выполняются операторы после ключевого слова Else до ключевого слова EndIf. Допускаются вложенные операторы If Then Else EndIf. Схема и алгоритм выполнения оператора представлены на рис. 4. Отметим, что Следующий оператор программы не имеет отношения к оператору If Then Else EndIf и является просто очередным оператором (либо может вообще отсутствовать, если оператор If Then Else EndIf является последним оператором программы).

Пример 12. Проверка допустимости выполнения операции деления с использованием оператора If Then Else EndIf.

A = 100: B = 10 'Двоеточие - признак записи второго оператора в одной строке

If B = 0 Then

A = 1

Else: A = A / B 'Поскольку условие ложно, выполнится эта ветвь оператора

EndIf

Рис. 4. Схема и алгоритм выполнения оператора If Then Else EndIf

Оператор ветвления Select Case End Selectпредставляет собой более развитую конструкцию, чем оператор If Else EndIf. Он позволяет выбрать один из многих вариантов дальнейшего выполнения программы. Если аргументом оператора If Else EndIf является условие, принимающее только два возможных значения и обеспечивающее один из двух вариантов продолжения последовательности действий, то в качестве аргумента оператора Select Case End Select выступает выражение, результатом вычисления которого оказывается целое число или строка. При записи оператора Select Case End Select в следующих после заголовка строках программы в виде констант предусматриваются различные варианты значений этого числа или строки. Выполняясь, оператор последовательно проверяет все имеющиеся в его теле строки Case. Если в процессе выполнения программы реальное значение вычисленного выражения совпало с константой, записанной в одной из строк, то выполняется последовательность операторов, соответствующая этой строке, посте чего управление передается следующему после конструкции Select Case End Select оператору.

Синтаксис оператора Select Case End Select имеет вид:

Select Case Выражение

[Case Значение1: [Операторы1]]

[Case ЗначениеN: [ОператорыN]]

[Case Else: [ОператорыElse]]

End Select

Возможен случай, когда реальное значение выражения не совпадет ни с одной константой, предусмотренной строками Case. В этом случае выполняются операторы, предусмотренные строкой Case Else. Схема и алгоритм выполнения оператора изображены на рис. 5. Как и в предыдущем случае, последний оператор на рис. 5, обозначенный как Следующий оператор программы не имеет отношения к конструкции Select Case End Select и представляет собой просто следующий оператор программы.

Рис. 5. Схема и алгоритм выполнения оператора Select Case End Select

Пример 13. Программа с использованием оператора Select Case End Select.

Dim День_недели As Integer, Rezult As String

День_недели = 2

Select Case День_недели

Case 1: Rezult = "Прием заказов"

Case 2: Rezult = "Выполнение заказа"

Case 3: Rezult = "Выполнение заказа"

Case 4: Rezult = "Выполнение заказа"

Case 5: Rezult = "Выдача заказов"

Case 6: Rezult = "Выходной день"

Case 7: Rezult = "Выходной день"

Case Else: Rezult = "Ошибка задания дня недели"

End Select

'В ячейке Rezult будет записана строка "Выполнение заказа"

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

Операторы Do While Loopи Do Until Loop предполагают выполнение всех операторов, размещенных после заголовка Do While, до ограничителя тела цикла обязательного ключевого слова Loop, и в качестве аргумента содержит условие продолжения цикла. Оператор Do While Loop продолжает выполнение тела цикла, пока условие продолжения имеет значение истина. То же самое делает Do Until Loop – но пока условие продолжения цикла имеет значение ложь.

При необходимости, тело цикла может содержать оператор принудительного завершения цикла Exit Do. Его выполнение приводит к передаче управления на следующий после ключевого слова Loop оператор. Туда же будет передано управление, если условие цикла примет значение соответственно для оператора Do While Loop ложь, а для оператора Do Until Loop истина.

Примечание. В принципе включение в состав операторов VBA оператора Do Until Loop является избыточным. Аналогичный результат может быть получен при использовании оператора Do While Loop с инвертированным условием.

Операторы Do While Loop и Do Until Loop языка VBA – это операторы с предусловием. Термин «предусловие» означает, что проверка условия проводится до выполнения операторов тела цикла. Если условие продолжения цикла с самого начала не выполняется, то операторы тела цикла при выполнении программы будут пропущены. На рис. 6 представлена схема и алгоритм выполнения операторов Do While Loopи Do Until Loopс предусловием, причем логика их действий противоположна по отношению к значению условия. Синтаксис таких операторов имеет вид:

Do [While Условие] [Операторы] [Exit Do] [Операторы] Loop или   Do [Until Условие] [Операторы] [Exit Do] [Операторы] Loop

Рис. 6. Схема и алгоритм выполнения операторов Do While Loop и Do Until Loop с предусловием

Пример 14. Иллюстрация возможности сокращения числа операторов линейной программы из примера 10 за счет использования оператора цикла с предусловием. Очевидно, что для обработки списка, например, из 100 сотрудников в этой программе необходимо только поменять диапазоны массивов и условие в операторе Do While Loop. В то же время линейная программа в этом случае займет несколько страниц текста.

Sub Расчет_заработной_платы3()

Dim Начислено(1 To 4) As Currency, Налог(1 To 4) As Currency, _

К_Выдаче(1 To 4) As Currency, i As Integer

i = 1 'Задание начального номера массива

Do While (i <= 4)

Начислено(i) = Cells(i + 1, 2) 'В первую ячейку массива Начислено записывается

'содержимое второй строки и второй колонки исходной таблицы Excel

Налог(i) = Начислено(i) * 0.12 'Рассчитывается значение налога и запоминается

'в соответствующей ячейке

Cells(i + 1, 3) = Налог(i) 'Значение налога возвращается в таблицу Excel

К_Выдаче(i) = Начислено(i) - Налог(i) 'Рассчитывается значение к выдаче

'и запоминается в соответствующей ячейке

Cells(i + 1, 4) = К_Выдаче(i) 'Значение к выдаче возвращается в таблицу Excel

i = i + 1 'Модификация счетчика строк

Loop

End Sub

Примечание. В языке VBA существует и более простая форма оператора While Wendпо смыслу совпадающая с оператором Do While Loop с предусловием, но имеющая более простой синтаксис:

While Условие

[Операторы]

Wend

Множество операторов Do языка VBA содержит пару операторов Do Loop Whileи Do Loop Untilс постусловием. В отличие от операторов с предусловием, проверка условия в этом случае проводится после выполнения операторов тела цикла. Таким образом, при выполнении оператора с постусловием тело цикла обязательно выполнится один раз независимо от начального значения условия. Схема и алгоритм выполнения операторов Do Loop While и Do Loop Until с постусловием представлены на рис. 7. Синтаксис операторов, имеет вид:

Do [Операторы] [Exit Do] [Операторы] Loop [While Условие] или   Do [Операторы] [Exit Do] [Операторы] Loop [Until Условие]

Рассмотренная в примере 14 программа практически без изменений может быть реализована и с помощью оператора c постусловием. Отличие программ проявится только тогда, когда первоначально заданное значение переменной i ('задание начального номера массива) будет больше 4. В этом случае программа с постусловием будет работать неправильно, поскольку действия с массивами выполнятся раньше проверки условия. Так как размеры массивов равны 4, то на этапе выполнения программы возникнет ошибка, связанная с выходом индекса за границы массива. Заметим, что в программировании существуют ситуации, когда независимо от значения условия продолжения цикла тело цикла должно быть выполнено один раз. В этих случаях использование оператора с постусловием оказывается предпочтительным.

Рис. 7. Схема и алгоритм выполнения операторов Do Loop While и Do Loop Until с постусловием

В программе примера 14 в состав операторов тела цикла, обозначенного на рис. 6 и рис. 7 как Операторы1, пришлось включить оператор присваивания i=i+1. Его назначением является подсчет количества выполненных циклов. Кроме этого, программа содержала оператор, задающий начальное значение переменной i=1. Условие продолжения цикла было задано явно, поэтому цикл должен выполняться строго определенное количество раз. Для упрощения программирования подобных задач в состав операторов языка VBA включен специальный оператор For To Next. Он позволяет прямо в заголовке задать начальное значение аргументу цикла (инициализировать цикл), указать условие продолжения цикла после ключевого слова To, и автоматически модифицировать переменную цикла после завершения выполнения операторов цикла с шагом, заданным после ключевого слова Step. Заметим, что если шаг изменения аргумента цикла в заголовке не задан, то он предполагается равным 1. Схема и алгоритм выполнения оператора For To Next показаны на рис. 8, а описание синтаксиса имеет вид:

For Счетчик=Начало To Конец [Step Шаг]

[Операторы]

[Exit For]

[Операторы]

Next [Счетчик]

Рис. 8. Схема и алгоритм выполнения оператора For To Next

Пример 15. Программа с оператором For To Next, реализующая задачу примера 10.

Sub Расчет_заработной_платы4()

Dim Начислено(1 To 4) As Currency, Налог(1 To 4) As Currency, _

К_Выдаче(1 To 4) As Currency, i As Integer

For i = 1 To 4

Начислено(i) = Cells(i + 1, 2) 'В первую ячейкe массива Начислено записывается

'содержимое второй строки и второй колонки исходной таблицы Excel

Налог(i) = Начислено(i) * 0.12 'Рассчитывается значение налога и запоминается

'в соответствующей ячейке

Cells(i + 1, 3) = Налог(i) 'Значение налога возвращается в таблицу Excel

К_Выдаче(i) = Начислено(i) - Налог(i) 'Рассчитывается значение к выдаче

'и запоминается в соответствующей ячейке

Cells(i + 1, 4) = К_Выдаче(i) 'Значение к выдаче возвращается в таблицу Excel

Next i

End Sub

Наконец, для автоматизации работы с объектами предусмотрена еще одна разновидность оператора цикла For Each Next:

For Each Элемент In Группа

[Операторы]

[Exit For]

[Операторы]

Next [Элемент]

Оператор For Each Next в этом случае повторяет выполнение операторов тела цикла для каждого элемента группы или семейства.

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

Sub Расчет_заработной_платы5()

Dim Начислено(1 To 4) As Currency, Налог(1 To 4) As Currency, _

К_Выдаче(1 To 4) As Currency, i As Integer

For i = 1 To 4

Начислено(i) = Cells(i + 1, 2) 'В первую ячейкe массива Начислено записывается

'содержимое второй строки и второй колонки исходной таблицы Excel

If Начислено(i) > 1000000 Then

Начислено(i) = 1000000

Cells(i + 1, 2).Font.ColorIndex = 4

Else

End If

If Начислено(i) < 0 Then

Начислено(i) = 0

Cells(i + 1, 2).Font.ColorIndex = 3

Else

End If

Налог(i) = Начислено(i) * 0.12 'Рассчитывается значение налога и запоминается

'в соответствующей ячейке

Cells(i + 1, 3) = Налог(i) 'Значение налога возвращается в таблицу Excel

К_Выдаче(i) = Начислено(i) - Налог(i) 'Рассчитывается значение к выдаче

'и запоминается в соответствующей ячейке

Cells(i + 1, 4) = К_Выдаче(i) 'Значение к выдаче возвращается в таблицу Excel

Next i

End Sub

Задание

Используйте согласованный с преподавателем вариант задания (табл. 1), выполненную на его основе таблицу Excel, созданный вами макроси написанную программу вычислений в таблице с использованием переменных VBA. Модифицируйте созданную вами линейную программу так, чтобы в ее составе использовались операторы выбора последовательности вычислений, ветвления, цикла. При этом исходные данные первоначально должны быть считаны из таблицы Excel, а результаты вычислений возвращены в нее.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: