close

Вход

Забыли?

вход по аккаунту

(3 Мб) - Истринские вести;pdf

код для вставкиСкачать
Лабораторная работа № 3. Программирование на языке
Visual Basic for Applications (VBA)
В этой лабораторной работе необходимо выполнить 2 задания своего варианта
(номер варианта выбираете по последней цифре шифра). Методические указания по
выполнению работы, примеры оформления заданий приведены ниже.
Теоретическая часть
1.1. Система программирования VBA
Visual Basic является мощным программным средством, с помощью которого
можно быстро и эффективно создавать Windows-приложения. Основное достоинство
этого языка программирования состоит в том, что он оптимально сочетает в себе простоту использования, доступность и большой набор разнообразных возможностей, позволяющих охватить все основные области программистской деятельности.
В названии этого языка слово «Visual» означает способ, при помощи которого
данным программным средством создается графический пользовательский интерфейс.
Вместо того чтобы описывать в программе, где и каким образом появится на экране тот
или иной объект, программист может просто расположить его в нужном месте еще на
этапе разработки своего приложения. В качестве таких "заготовок" используются
встроенные элементы управления, то есть уже созданные объекты с заданными наборами свойств и методов. Программист может изменять значения тех или иных свойств
у выбранного объекта, а также описывать для него различные методы. Свойства – это
имеющие имя атрибуты объекта, они определяют характеристики объекта (цвет, положение на экране, состояние объекта). Методы – это команды, которые используются
для изменения объекта, например, перемещение, изменение размеров. Используя предусмотренные для объектов методы, можно обойтись минимальным программированием приложения.
Имеется возможность обработки программистом различных событий, которые
могут возникать в результате каких-либо действий пользователя. События – действия
пользователя или другие внешние действия, например, щелчок по кнопке, нажатие клавиши и др. Программа может обрабатывать два основных типа событий: инициируемые
пользователем и генерируемые системой.
1.2. Структура редактора Visual Basic
Запуск редактора Visual Basic во всех приложениях Microsoft Office (и в Excel, в
частности) осуществляется следующим образом: вкладка Разработчик  группа
Код  Visual Basic. Если вкладка Разработчик не отображена на ленте, то необходимо щелкнуть мышью по кнопке Office, в появившемся окне щелкнуть по кнопке Параметры Excel, в основных параметрах Excel установить флажок Показывать вкладку
«Разработчик» на ленте и щелкнуть по кнопке ОК, после чего новая вкладка появится
на ленте. После запуска редактора откроется окно, похожее на окно, представленное на
рис. 1.1.
1
Рис. 1.1.
В окне редактора Visual Basic можно выполнять различные операции одновременно с работой в приложении, откуда этот редактор был вызван. Переход между окнами
осуществляется через Alt + Tab (в редактор также можно войти, нажав Alt + F11).
Всего в редакторе Visual Basic предусмотрено 9 дополнительных окон:
 Project Explorer — окно проводника проекта. По умолчанию оно открыто и
находится в левой части окна редактора Visual Basic. В нем можно просмотреть компоненты проекта и выполнить множество операций;
 UserForm — окно формы. Появляется тогда, когда вы редактируете пользовательскую форму при помощи дизайнера форм;
 Toolbox — панель инструментов управления. Появляется вместе с окном
формы, из нее можно добавить элементы управления в форму или в сам документ;
 Properties — одно из самых важных окон. Через него можно просмотреть
свойства элемента управления или компонента проекта и изменить их;
 Code — окно программного кода. В этом окне выполняется основная работа
по написанию кода макроса. При открытии программного модуля открывается автоматически;
 Object Browser — обозреватель объектов. Он необходим для получения информации о классах, доступных программе;
 Watch — окно контролируемых выражений. Используется во время отладки
для отслеживания значений выбранных переменных программы и выражений;
 Locals — окно локальных переменных. Нужно для отслеживания во время
отладки значений переменных текущей процедуры;
2
 Immediate — окно для немедленного выполнения команд в ходе отладки.
Оно позволяет выполнить отдельные строки программного кода и немедленно получить результат.
Для нахождения какого-либо окна надо выбрать в меню View одноименную команду, и если окно было скрыто, оно появится в редакторе.
Меню File (Файл) содержит команды, необходимые для сохранения изменений
в проекте VBA и вывода на экран или на печать исходного кода макросов.
Меню Edit (Правка) содержит команды, предназначенные для управления исходным кодом макроса в окне Code, а также объектами в формах.
Меню View (Вид) содержит команды, позволяющие выводить или убирать с экрана различные окна редактора VBA.
Меню Insert (Вставка) содержит команды, позволяющие добавлять в проект
различные объекты: процедуры, модули, формы, классы и пр.
Меню Format (Формат) содержит команды, используемые при создании пользовательских диалоговых окон. Команды этого меню позволяют выравнивать объекты в форме по отношению друг к другу, настраивать размеры и внешний вид элементов управления, а также выполнять многие другие операции.
Меню Debug (Отладка) содержит команды, предназначенные для тестирования
и отладки макросов. Команды этого меню позволяют запустить макрос с заданной
точки, отслеживать выполнение макроса по шагам и останавливать выполняемый
макрос в любой момент его выполнения.
Меню Run (Запуск) содержат команды, предназначенные для запуска макроса
на выполнение, прерывания или возобновления его работы, а также для возврата
прерванного макроса в начальное состояние.
Меню Tools (Сервис) содержит, в частности, команды, позволяющие выбрать
макрос для выполнения или получить доступ к внешним библиотекам макросов. С
помощью других команд этого меню можно получить доступ к диалоговому окну
Option (параметры) редактора VBA и окну свойств проекта VBA.
Меню Add-Ins содержат всего одну команду Add-In Manager, при выборе которой на экране отображается диалоговое окно Add-In Manager. В этом окне можно
загружать или выгружать, регистрировать и определять поведение программдополнений (надстроек).
1.3. Создание интерфейса пользователя
1.3.1. Создание форм, свойства и методы форм
Чаще всего для предоставления пользователю графического интерфейса используются формы VBA.
Обычно форма запускается при открытии пользователем документа. Пользователь выполняет на форме какие-то действия по вводу или выбору информации (например, выбирает значения в раскрывающемся списке, устанавливает значения для
флажков и переключателей и т.п.), а потом, как правило, нажимает кнопку на этой
форме, и введенная им информация передается в базу данных, отправляется по электронной почте, записывается в файл для распечатки и т.д.
3
Для создания формы достаточно в редакторе Visual Basic выполнить команду
Insert  UserForm или щелкнуть правой кнопкой мыши на проекте (т.е. на имени
документа) в окне Project Explorer и в контекстном меню выбрать команду Insert 
UserForm. Откроется окно дизайнера форм (Form designer), в котором будет представлено пустое серое окно формы, заполненное сеткой из точек и рядом Toolbox —
панель с набором элементов управления (рис. 1.2). По умолчанию форма называется
UserForm1. Если включен показ окна свойств Properties (он включается по клавише
F4), то в этом окне будут представлены свойства формы. Переход к редактору кода
для этой формы (по умолчанию открывается событие Click) выполняется по клавише F7, возврат обратно в окно дизайнера форм — по Shift + F7.
Рис.1.2
Для форм и элементов управления можно настраивать свойства при помощи
графического интерфейса окна свойств — это резко уменьшает количество программного кода, которое нужно писать вручную.
Некоторые самые важные свойства форм (кроме ShowModal все они применимы и для других элементов управления) приведены далее.
 Name — это свойство определяет имя формы. Пользователь вашей программы, скорее всего, его никогда не увидит. Имя формы используется только
программистом в коде для этой формы (и в окнах редактора Visual Basic).
 Caption — определяет заголовок формы (по умолчанию совпадает с именем
формы). Рекомендуется ввести строку, которая будет напоминать пользователю о назначении формы (например, "Выбор типа отчета").
4
 Enabled — если это свойство установлено в False, пользователь не сможет
работать с формой. Используется для временного отключения формы, например, пока пользователь не обеспечит какие-то условия для ее работы.
 ShowModal — если свойство установлено в True (по умолчанию), то пользователь не может перейти к другим формам или вернуться в документ, пока
не закроет эту форму (так называемый «модальный» режим работы).
Большая часть других свойств относится к внешнему виду, размерам и местонахождению формы. Свойство Back Color (вкладка Palette) определяет цвет. Размер
и позиция формы на экране определяются свойствами: Left – расстояние от левой
границы формы до левого края экрана, Top – расстояние от верхней границы формы
до верхнего края экрана, Width – ширина формы, Height – высота формы. Размеры
задаются в пунктах. Один пункт (единица измерения шрифта) равен 1/72 дюйма (
0,35 мм).
Самые важные методы форм перечислены в следующем списке.
 В процессе редактирования формы (из окна редактора Visual Basic) ее можно
запускать по нажатию клавиши <F5>. После того, как форма будет готова,
вы должны обеспечить ее запуск в документе. Для запуска формы нужно
воспользоваться методом Show():
UserForm1.Show
Если форма уже была загружена в память, она просто станет видимой, если
нет — то будет автоматически загружена (произойдет событие Load).
 Спрятать форму можно с помощью метода Hide(), например:
UserForm1.Hide
Форма будет убрана с экрана, но останется в памяти. Потом при помощи метода Show() можно будет опять ее вызвать в том же состоянии, в каком она была на момент скрытия, а можно, например, пока она спрятана, программно изменять ее и расположенные на ней элементы управления. Окончательно форма
удалится из памяти при закрытии документа;
 Если форма больше точно не потребуется, можно ее удалить из памяти при
помощи команды Unload:
Unload UserForm1
Остальные методы относятся либо к обмену данными через буфер обмена
(Copy(), Cut(), Paste()), либо к служебным возможностям формы (PrintForm(),
Repaint(), scroll()).
Важнейшая концепция VBA — события. Событие (event) — это то, что происходит с программой и может быть ею распознано. Например, к событиям относятся
щелчки мышью, нажатия на клавиши, открытие и закрытие форм, перемещение
формы по экрану и т. п. VBA построен таким образом, чтобы можно было создавать
на нем программы, управляемые событиями (event-driven). Такие программы противопоставляются устаревшему процедурному программированию.
Поскольку форма — это во многом просто контейнер для хранения других элементов управления, главное ее событие — Initialize. Все остальные события обычно
используются не для формы, а для расположенных на ней элементов управления.
5
Для распечатки формы предусмотрено специальное диалоговое окно, которое
можно вызвать по нажатию клавиш Ctrl + P (при выбранной форме в дизайнере);
1.3.2. Размещение объектов на форме
Элементы управления могут быть добавлены на форму следующим образом:
щелкнуть левой кнопкой мыши на изображении соответствующего элемента на панели
элементов управления и указателем мыши при нажатой левой кнопке начертить на
форме условный прямоугольник в том месте формы, где будет предположительно находиться этот элемент, учитывая при этом его примерные размеры. Аналогичные действия поочередно выполняются для каждого элемента. Если необходимо изменить какой-либо объект на форме, его необходимо выделить, при этом на его границах появятся так называемые манипуляторы размера в виде маленьких закрашенных квадратиков.
Перемещать и изменять размеры выделенного объекта можно при помощи мыши. Чтобы расположить несколько объектов на форме в заданном порядке, выровнять объекты
относительно вертикальной, горизонтальной оси, по центру, левому краю, правому
краю эталона, привести ширину и высоту объектов к эталонным размерам можно воспользоваться соответствующими командами меню Format.
1.3.3. Общие свойства элементов управления
Внешний вид и поведение элементов управления определяются их свойствами.
Они включают визуальные характеристики (размер, цвет, положение и т.п.) и характеристики, определяющие способ использования элемента управления. Обычно большинство свойств, определенных по умолчанию, не требуется изменять, и лишь несколько свойств нуждаются в изменении. Свойства можно изменять на этапе проектирования приложения и в программном коде. Однотипные элементы управления могут
иметь по ряду свойств одни и те же установки. Такие свойства называются групповыми
и устанавливаются одновременно для группы выделенных объектов. Выделить группу
элементов можно с помощью кнопки Pointer (кнопка со стрелкой) на панели элементов
управления или, удерживая нажатой клавишу Ctrl, щелкнуть поочередно по объектам,
включаемым в группу. Удалить элемент из группы можно, если повторно щелкнуть по
нему мышью при нажатой клавише Ctrl.
Свойства элементов управления определяются при помощи окна свойств. Список
свойств состоит из двух частей: в левой части выводится список всех существующих
свойств для выделенного объекта, а в правой части – установленные для этих свойств
значения, которые можно редактировать (текстовые поля) или выбирать (перечислимые
поля). Список объектов представляет собой раскрывающийся список в верхней части
окна свойств, при помощи которого можно выбрать тот или иной объект из имеющихся
на форме для просмотра и редактирования его свойств.
Многие свойства являются общими для элементов управления разного типа. В то
же время каждый тип элемента управления имеет собственные свойства, характерные
только для этого типа элементов управления.
Рассмотрим несколько общих свойств элементов управления. Размер и позиция
элемента определяются свойствами: Left – расстояние от левой границы элемента до
левого края формы, Top – расстояние от верхней границы элемента до верхнего края
6
формы, Width – ширина элемента, Height – высота элемента. Размеры задаются в
пунктах.
Часто при работе приложения требуется сделать недоступными для пользователя
некоторые элементы управления. Для этого используют два свойства Enabled и Visible.
Свойство Enabled определяет, будет ли элемент управления реагировать на событие
или нет. Если значение свойства равно False, элемент управления будет недоступен и
пользователь не сможет его использовать. Элемент при этом становится обесцвеченным так же, как элементы меню, которые нельзя выбрать. Свойство Visible при значении False позволяет сделать элемент управления невидимым. В программном коде
можно изменить значение этих свойств на True и сделать элементы видимыми и доступными.
Каждый элемент управления имеет свойство Name (имя), которое используется
для ссылок на него в процедуре (например, для изменения свойств этого элемента
управления во время работы программы). Имя, даваемое по умолчанию, состоит из типа элемента управления и номера: Text1, Text2, …, Label1 и т. д. Имя можно изменить,
но необходимо, чтобы оно удовлетворяло следующим требованиям:
 длина имени должна быть не более 32 символов;
 начальный символ должен быть буквой;
 в имя могут входить только буквы, цифры и символ подчеркивания;
 прописные и строчные буквы рассматриваются как одинаковые.
1.3.4. Элемент управления Label
Элемент Label (метка) является самым простым элементом управления. Это
просто область формы, в которой выводится какой-то текст (рис. 1.3). Элементы Label могут использоваться как самостоятельно, так и в виде пояснений для текстового
поля, списка или другого элемента.
Самое важное свойство метки – Caption (надпись). Шрифт надписи определяется
свойством Font (шрифт). Для выбора шрифта в окне свойств необходимо установить
курсор напротив выбранного свойства и нажать кнопку с тремя точками. В открывшемся диалоговом окне Шрифт можно установить название, начертание и размер шрифта.
Цвет символов задается свойством ForeColor (вкладка Palette). Свойство BackColor
задает цвет фона поля надписи. BorderStyle задает стиль рамки (0 – без обрамления, 1 –
надпись будет иметь контур). Свойство TextAlign устанавливает выравнивание текста в
элементе управления по центру, левому или правому краю.
Текст, который задан свойством Caption, может иметь достаточно большой
размер и занимать несколько строк. Максимальное количество символов 65528. Если
размер текстового объекта заранее не известен (значение свойства Caption меняется
в процессе выполнения программы), то может оказаться, что текст не помещается
внутри элемента. В этом случае нужно использовать свойства AutoSize и
WordWrap. Если для свойства AutoSize установлено значение True, то происходит
расширение поля для размещения текста, а если установлено значение False, то
часть информации, не поместившаяся в объект, будет не видна. Свойство WordWrap
также имеет два значение True и False. При значении True изменяется высота объ-
7
екта и осуществляется автоматический перенос слов, при значении False – размер
объекта изменяется только в горизонтальном направлении (при AutoSize = True).
Объекты Label имеют также свойство ControlTipText, которое задает текст
всплывающей подсказки – краткое пояснение, которое появляется при подведении
курсора к объекту во время работы приложения.
Рис. 1.3
1.3.5. Элемент управления TextBox
Текстовое поле (TextBox) – один из самых часто используемых элементов
управления (рис. 1.4).
Рис. 1.4.
Текстовое поле используется:
 для приема каких-либо текстовых данных, вводимых пользователем (например, для отправки по почте, для занесения в базу данных и т.п.);
 для вывода пользователю текстовых данных с возможностью их редактирования (из базы данных, листа Excel и т.п.);
 для вывода пользователю текстовых данных с возможностью копирования и
печати, но без возможности изменения (классический пример — текст лицензионного соглашения).
Для ввода и вывода данных используется свойство Text (или Value), которое
заполняется либо в программном коде, либо на этапе проектирования. Если объект
активизирован, то в текстовом окне появляется курсор и пользователь может вводить
данные. Числовые данные будут введены в текстовом формате, поэтому для выполнения вычислений их следует привести к числовому формату с помощью функции
Val. Значение True свойства MultiLine позволяет ввести текст, состоящий из не8
скольких строк. В этом случае можно добавить полосы прокрутки (свойство
ScrollBars). Свойство ControlSource – ссылка на источник текстовых данных для
поля, например, можно ссылаться на ячейку в Excel и т.п. При изменении пользователем данных в текстовом поле автоматически изменится значение на источнике, определенном в ControlSource.
Для задания стиля оформления текстового поля применяются свойства: Font, ForeColor, BorderStyle, BackColor, TextAlign, ControlTipText. Описание этих свойств
дано выше.
1.3.6. Элемент управления CommandButton
Элемент управления CommandButton (кнопка) – самый распространенный
элемент управления на формах (рис. 1.5).
В большинстве форм обязательно будет, по крайней мере, две кнопки: OK и
Отмена (Cancel). По нажатию кнопки OK должно выполниться то действие, ради
чего создавалась форма, по нажатию кнопки Отмена форма должна закрыться. Задача пользователя — обеспечить необходимый код для этих кнопок, который и будет
выполнять эти действия.
Рис. 1.5.
Кнопка всегда содержит надпись, которая задается свойством Caption и обозначает назначение кнопки. С помощью свойства Picture, можно назначить кнопке
рисунок (пиктограмму).
Главное событие для кнопки – это, конечно, Click. Как правило, к этому событию и привязывается программный код, ради которого создавалась кнопка.
1.3.7. Элемент управления ListBox
Элемент управления ListBox (список) применяется в том случае, когда пользователю необходимо выбрать один или несколько элементов из имеющегося списка
для выполнения определенных действий. Списки могут содержать разнообразную и
разнородную информацию, как текстовую, так и числовую. Окно списка представляет собой прямоугольник, содержащий список элементов с вертикальной полосой
прокрутки с правой стороны, если список длинный и не помещается в окне. Программно элементы добавляются в список с использованием метода AddItem. Пример этого элемента управления представлен на рис. 1.6.
Свойство MultiSelect позволяет выбирать различное число строк из списка. По
умолчанию это свойство отключено.
9
Рис. 1.6.
1.3.8. Применение дополнительных элементов управления
Возможности форм VBA не ограничиваются только использованием стандартных элементов управления, которые изначально помещены на панель ToolBox. В
распоряжении пользователя сотни элементов управления, встроенных в Windows, в
другие продукты или поставляемые отдельно. Для того чтобы можно было разместить их на форме, надо щелкнуть правой кнопкой мыши по пустому пространству
панели ToolBox, выбрать пункт контекстного меню Additional Controls, а затем в
списке выбрать нужный элемент. При использовании нестандартных элементов
управления необходимо помнить, что при переносе программы (файла Office) на
другой компьютер потребуется обеспечить на нем наличие необходимых библиотек.
Один часто используемый элемент управления, который есть практически на
всех компьютерах — Calendar (календарь). В зависимости от версии операционной
системы и установленного программного обеспечения он может называться поразному, например, Календарь 12.0. При помощи этого элемента управления пользователю будет очень удобно выбирать нужную дату. На рис.1.7 показан элемент
управления Calendar и надпись, дублирующая значение, выбранное пользователем в
Calendar.
Рис. 1.7.
Главное свойство этого элемента управления – Value, т.е. та дата, которая выбрана пользователем. Остальные свойства предназначены для отображения внешнего вида календаря.
10
В Excel на панели ToolBox имеется еще один специфический элемент управления – RefEdit (в списке Additional Controls он называется как RefEdit.Ctrl). Он
похож на текстовое поле с кнопкой справа. При нажатии на эту кнопку форма, на которой размещен этот элемент управления, «спрячется», а пользователю будет предоставлена возможность выбрать одну ячейку или диапазон ячеек Excel. После того
как пользователь завершит выбор, он опять вернется в окно формы, а в RefEdit будет помещена информация об адресе выбранного диапазона. Главное свойство этого
элемента управления – Value.
1.4. Создание программного кода
Программный код, создаваемый пользователем, состоит из некоторого набора
процедур, обрабатывающих различные события для объектов, размещенных на формах
проектируемого приложения. Однако программный код можно написать и без привязки
к событиям. Можно создавать процедуры общего назначения, которые впоследствии
будут вызываться в других процедурах.
После выполнения команды View  Code или нажатия кнопки Code в окне проводника проектов на экране появляется окно для записи программного кода, которое
содержит два раскрывающихся списка. Левый список содержит перечень объектов, а
правый – список событий. Для выбранного объекта надо найти в правом списке соответствующее событие. После выбора события появится заготовка программного модуля – заголовок процедуры и последний оператор этой же процедуры. Далее пользователь заполняет заготовку текстом программы. Аналогично поступают с остальными
объектами, которые имеются в левом списке, если для них необходимо запрограммировать определенные действия. Заготовку процедуры можно получить и другим
способом – двойным щелчком по соответствующему объекту на форме, например, по
кнопке с именем CommandButton1:
Private Sub CommandButton1_Click()
End Sub
Первую строку можно перевести так: "Локальная процедура, в которой компьютеру пишется инструкция, что делать, если пользователь щелкнет мышкой по кнопке с
именем CommandButton1", а последнюю строку – "Конец процедуры". Между строками оставлено свободное место, в котором мигает курсор, предлагая ввести туда операторы программы. Они-то и будут выполнены при щелчке по кнопке.
Следует отметить особенность события Load и процедуры Form_Load(). Программные утверждения этой процедуры запускаются в момент запуска программы. В
эту процедуру помещаются утверждения, которые необходимо выполнять каждый раз
при запуске программы. В отличие от других процедур обработки событий вместо
имени формы в процедуре используется имя Form.
В Visual Basic каждый оператор пишется в отдельной строке. Количество пробелов и знаков табуляции между частями оператора не имеет значения. В записи оператора строчные и прописные буквы равноценны, поэтому для повышения читаемости
текста ключевые слова обычно начинаются с прописной буквы. Чтобы расположить
несколько операторов в одной строке, между ними ставится символ двоеточие. В слу11
чае необходимости расположения одного оператора на нескольких строках следует в
конце каждой строки ставить символ подчеркивания, отделяя его пробелом от последнего символа строки. В Visual Basic, как и в большинстве языков программирования,
могут быть использованы комментарии. Они предназначены для пояснения отдельных
фрагментов программы и игнорируются Visual Basic при выполнении программы. Для
выделения начала комментария можно использовать апостроф ( ' ) или оператор Rem.
Поскольку Rem – оператор, он должен быть записан в отдельной строке, апостроф может ставиться в любом месте строки, при этом текст комментария располагают справа.
Visual Basic содержит развитые средства контекстной оперативной помощи
пользователю при наборе программного кода. Для уменьшения количества ошибок при
написании свойств и методов объектов Visual Basic автоматически отображает список
доступных элементов после набора имени объекта и точки. Содержимое списка зависит
от типа объекта. Для ввода выбранного элемента необходимо нажать клавишу Tab или
дважды щелкнуть мышью на нем вместо того, чтобы его набирать, но предлагаемую
подсказку можно и проигнорировать, продолжая набирать текст программы. Существует также и другая возможность ускорения процесса создания программного кода путем автоматической подсказки синтаксиса вводимого оператора или функции. После
набора строки и нажатия клавиши Enter цвет ключевых слов изменяется с черного на
синий, а комментариев – с черного на зеленый. Кроме того, форматируется текст:
строчные буквы в начале ключевых слов заменяются прописными, где нужно вставляются пробелы. Это говорит о том, что Visual Basic распознал строку как допустимую, в
противном случае цвет символов строки становится красным и выдается сообщение о
синтаксической ошибке.
Выделенный фрагмент текста программы можно перемещать и копировать с помощью мыши и буфера обмена. Доступны также и другие команды пункта меню Edit.
Запустить программу на выполнение можно несколькими способами: выбрать
команду Run Sub в пункте меню Run, нажать кнопку  (Run Sub) на стандартной
панели инструментов, или нажать клавишу F5. При этом на экране появится окно созданной формы (точки на форме исчезнут). Работу программы можно закончить, закрыв
окно формы или нажав кнопку  (Reset) на стандартной панели инструментов.
1.5. Отладка программы
При разработке программ Visual Basic возможны ошибки. Их можно разделить
на три вида: синтаксические ошибки, ошибки, возникающие при выполнении программы, и логические ошибки.
Причиной возникновения синтаксической ошибки могут быть неправильно написанные ключевые слова, ошибки применения разделителей или недопустимые комбинации операторов. Большинство таких ошибок Visual Basic распознает сразу же после того, как курсор покидает строку с оператором. Синтаксические ошибки в многострочных операторах цикла и ветвления не указываются при вводе, но при компиляции
программы Visual Basic распознает такой незавершенный многострочный оператор,
выдает сообщение об ошибке и выделяет ошибочный оператор. Сообщение о синтаксической ошибке достаточно информативно и позволяет легко определить причину
возникновения ошибки и устранить ее. При компиляции программы Visual Basic также
12
определяет имена объектов, не связанных с элементами управления на форме, и выявляет переменные, которые не были явно объявлены (если был записан оператор Option
Explicit в разделе General).
Если не использовать оператор Option Explicit, случайные опечатки в программе могут привести к неприятным последствиям. Например, в начале программы была
явно объявлена и проинициализирована переменная Num, затем была допущена опечатка в написании этой переменной: Nim вместо Num. Visual Basic не обнаружил эту
ошибку, Nim воспринял как переменную типа Variant с начальным значением, равным
0, что привело при проведении вычислений к неверному результату. Такую ошибку
можно обнаружить визуально и исправить, гораздо сложнее найти и устранить ошибку,
связанную с использованием кириллицы вместо латиницы в одинаковых по начертанию символах. Поэтому, одно из важных правил, которое должно соблюдаться при
программировании на Visual Basic, – явное объявление переменных и объектов с ключевыми словами Dim, Public или Private и запись оператора Option Explicit в разделе
General. Для автоматической вставки оператора Option Explicit надо установить опцию Require Variable Declaration команды Tools  Option  вкладка Editor, но следует иметь в виду, что автоматически будет добавляться этот оператор только во вновь
создаваемые модули.
На стадии выполнения программы Visual Basic замечает такие ошибки, как деление на 0, переполнение, извлечение квадратного корня из отрицательного числа, открытие несуществующего файла и др. Компилятор сообщает о подобных ошибках в
диалоговом окне, дающем пользователю возможность либо отладить программу, либо
завершить ее. При нажатии на кнопку Debug Visual Basic переходит в режим прерывания и выделяет ошибочную, по его мнению, строку желтым цветом. Если ошибка не
слишком серьезная, пользователь может внести исправления и продолжить работу программы.
Логические ошибки являются следствием плохо разработанного алгоритма, плохого учета возможных значений входных данных и т.д. При их появлении программа
выполняется корректно, но получаются неверные результаты.
В среде Visual Basic имеются различные средства, которые можно использовать
для отслеживания и исправления ошибок в программах. Способы идентификации логических ошибок состоят в установке точек останова (контрольных точек), пошаговом
режиме выполнения отлаживаемой программы, наблюдении за значениями переменных
и др. Основные средства отладки доступны через меню Debug и одноименную панель
инструментов.
Пошаговый режим работы программы применяется для проверки каждой строки
программы в порядке ее выполнения. Есть два режима пошаговой обработки: с заходом
в процедуры (Debug  Step Into или F8) и без захода в процедуры (Debug  Step
Over или Shift+F8). Первый из них служит для прохода всей программы строка за
строкой. Если в одной из строк происходит вызов процедуры, то пошаговое выполнение распространяется и на код этой процедуры: каждый ее оператор выполняется в
этом режиме. Для выполнения очередного шага нужно нажать клавишу F8. Следует
иметь в виду, что подсвечивается тот оператор, которому предстоит быть выполненным. Режим Step Over аналогичен режиму Step Into за исключением того, что если те13
кущий оператор содержит вызов процедуры, то заход в нее не выполняется, то есть вся
процедура рассматривается как одно действие. Для того чтобы узнать значение какойлибо переменной, достаточно задержать на секунду указатель мыши над переменной и
в появившемся небольшом окне увидеть это значение. Если же необходимо увидеть
значение выражения, его следует выделить, а затем установить на нем указатель мыши.
Пошаговый способ выполнения программы удобен для отладки простейших
программ. Когда программа большая или в ней много циклов, нажимать на клавишу F8
приходится очень часто. Обычно достаточно останавливаться только на некоторых
строках программы. Visual Basic позволяет задавать такие строки, так называемые точки останова, или контрольные точки. Для этого надо щелкнуть по вертикальной серой
полосе в левой части окна кода против строки, на которой надо прервать выполнение
программы, или нажать клавишу F9. Строка, на которой установлена контрольная точка, выделится красным цветом. Запущенная программа прервется на этой строке, после
чего строка будет выделена желтым цветом и обозначена стрелкой. Имея прерываемую
таким способом программу легко проверять значения переменных, перемещаться строка за строкой по программе, делать небольшие изменения в коде или продолжать работу программы, нажимая клавишу F5. Точка останова может быть отменена щелчком
мыши по точке в левой части строки или нажатием клавиши F9. Установленные в среде
разработки точки останова не сохраняются вместе с программой и не включаются в
EXE-файл при его создании.
Кроме контроля хода выполнения программы важной задачей инструментов отладки Visual Basic является проверка значений выражений. Для реализации механизма
просмотра предлагается несколько способов. О самом простом способе просмотра было
упомянуто выше. Этот способ заключается в установке указателя мыши на соответствующей переменной или выражении в окне кода программы в режиме прерывания.
Еще одну возможность просмотра значений выражений предоставляет окно Quick
Watch, вызываемое командой Debug  Quick Watch, при этом текстовый курсор должен находиться внутри имени контролируемой переменной. Обычно данное окно используется не только для просмотра значения переменной, но и для добавления этой
переменной в окно просмотра Watch Window (кнопка Add). Добавить имя контролируемой переменной в окно Watch Window можно также с помощью команды Debug 
Add Watch, причем в этом случае в диалоговом окне Add Watch можно определить
дополнительные параметры просмотра и выполнения программы. С помощью команды
View  Locals Window можно вызвать окно Locals, назначение которого показывать в
режиме прерывания значения локальных переменных выполняемой процедуры. В окне
непосредственных вычислений, вызываемом командой View  Immediate, в режиме
прерывания можно вводить и выполнять операторы Visual Basic, изменять значения
свойств объектов, применять методы объектов, что позволяет, например, сымитировать
логическую ошибку или вызывать процедуру. Окно непосредственных вычислений
можно использовать и по-другому. В этом случае, используя объект Debug и его метод
Print, сообщения окну Immediate посылают из программного кода, например,
Dеbug.Print a, summa, a*b-c. Возможность такого вывода в окно отладки имеет несколько преимуществ. Во-первых, контрольные значения можно выводить не только в
14
режиме прерывания, но и в режиме выполнения, что позволяет выводить значения выражений, не останавливая выполнение программы. Во-вторых, выведенные значения,
отражаемые в окне непосредственных вычислений, можно просмотреть даже после остановки программы (в окне сохраняются последние 200 строк).
1.6. Основы программирования на VBA
1.6.1. Типы данных
В табл. 1.1 приведены типы данных, поддерживаемые Visual Basic.
Тип
Содержимое
Память, байт
Boolean Логические значения
Byte
Однобайтные целые
числа
Integer Целые числа
Long
Длинные целые числа
Single
Вещественные числа
одинарной точности
2
1
Double
8
Вещественные числа
двойной точности
Currency Денежные единицы
(целая часть – до 15
цифр, дробная – 4
цифр),
Date
Дата и время
String
Текстовая информация
(строка)
Variant
Любая информация
2
4
4
8
Таблица 1.1
Диапазон возможных
значений
[True, False]
[0; 255]
[-32768; 32767]
[-2147483648; 2147483647]
[-3.4028231038;-1.40129810-45] и
[1.40129810-45;3.4028231038]
[-1.797631348623210308;
-4.9406564584124710-324] и
[4.9406564584124710-324;
1.797631348623210308]
[-922337203685477,5808;
922337203685477,5807]
8
[1.01.100; 31.12.9999]
1 байт для каж- До 65400 символов для строк
дого символа фиксированной длины; до
2000000000 символов для динамических строк
16 байт для чи- Любое числовое или строковое
сел 1 байт на
значение
каждый
символ для
строк
Данные типа Boolean содержат только два значения: True (истина) и False (ложь).
В Visual Basic значению True соответствует 1, а False – 0.
Данные типа Byte, Integer и Long содержат лишь целые значения из различных
диапазонов. Если переменной такого типа присваивается значение 1.4, то возвращается
1, а если 1.5, то 2. В случае, если переменной присваивается значение вне заданного
диапазона, то выдается сообщение об ошибке: Overflow (переполнение).
Данные типа Single и Double содержат числа с плавающей точкой из разных диапазонов значений. Данные типа Currency также служат для представления чисел с пла-
15
вающей точкой, но число разрядов после запятой ограничено четырьмя. Этого вполне
достаточно при выполнении денежных расчетов. Например,
Dim a As Single, b As Double, c As Currency, d As double
a=2/3
' Результат: 0.6666667
b=2/3
' Результат: 0.666666666666667
c=2/3
' Результат: 0.6667
d = 4000.1234567895745357 ' Результат: 4000.12345678957
Значение переменной d Visual Basic обрезал прямо в программе, зная, что с такими длинными числами работать не может (максимально 15 значащих цифр).
Данные типа String служат для хранения строк. Различают строки переменной и
фиксированной длины. Строки переменной длины могут содержать до двух миллиардов символов. Когда такой переменной присваивается значение, то размер переменной
изменяется так, чтобы он соответствовал длине присвоенного строкового значения.
Строка фиксированной длины – это строка постоянного размера, указанного при объявлении переменной. Если такой переменной присваивается значение более длинное,
то лишние символы отбрасываются. Если значение, которое присваивается, короче, то
оставшееся место заполняется пробелами. Для того, чтобы Visual Basic отличил строку
от имени переменной, строка заключается в кавычки. Строковые переменные фиксированной длины описываются следующим образом:
Dim VarName As String * Длина_Строки
где Длина_Строки – целочисленная переменная или константа, содержащая число, указывающее длину строковой переменной. Например
Dim a As String, b As String * 8
a = "Информатика"
' Результат: Информатика
b = "Информатика"
' Результат: Информат
1.6.2. Объявление переменных
Переменная – это именованная область памяти, предназначенная для хранения
данных. Таким образом, для доступа к содержимому памяти достаточно знать имя переменной. Тип данных задает определенный формат и размер содержимого переменной.
Visual Basic, в отличие от других языков программирования, не требует обязательного явного объявления переменных, но явное объявление имеет преимущества:
оно более наглядно, улучшает читабельность программы, более эффективно использует
память. Для явного объявления переменной используют оператор Dim, имеющий следующий синтаксис:
Dim Имя_1 As Тип_1, Имя_2 As Тип_2, …, Имя_N As Тип_N
где Dim – ключевое слово (сокращение от Dimension – размерность), сообщающее
Visual Basic, что декларируется переменная и резервируется область памяти для ее хранения;
As (как) – ключевое слово, сообщающее Visual Basic, что определяется тип
переменной;
16
Имя_1, Имя_N – имена переменных (идентификаторы, не входящие в перечень ключевых слов Visual Basic и отличающие переменные друг от друга и от других
объектов программы);
Тип_1, Тип_N – типы данных для объявляемых переменных.
1.6.3. Определение констант
Наряду с переменными, для хранения информации в программе можно использовать
константы. Их особенностью является то, что при описании в программе какой-либо
константы ей присваивается определенное значение, которое в дальнейшем не может
быть изменено другими операторами.
Неименованные и встроенные константы были рассмотрены выше, но часто возникает необходимость описывать в программе собственные константы, которые называются пользовательскими, присваивая им определенные значения. Они всегда сохраняют значение, присвоенное им при разработке. Области видимости для констант определяются так же, как и для переменных. Константы бывают локальные, контейнера и глобальные.
При объявлении констант используется ключевое слово Const. Глобальная константа
объявляется как Public, при этом необходимо иметь в виду, что глобальные константы
можно объявлять только в модуле.
[Public | Private] Const Имя_константы = Значение
Одновременно с объявлением константе присваивается и значение. В качестве значения допускается использовать только постоянные значения и их комбинации, включая арифметические и/или логические операторы, но не функции. Например,
Const Pi = 3.14159265358979
Const Millennium = #1/01/20001#
Const Stroka = "Visual Basic"
Примеры демонстрируют преимущество использования констант, например, при
вычислениях с числом  в программе не нужно каждый раз вводить длинное число, а
только имя константы Pi. Еще одно преимущество констант заключается в том, что если глобальная константа используется в нескольких процедурах, то при изменении ее
значения оно будет правильно воспринято всеми процедурами.
Константы можно объявлять и с указанием типа данных. Для объявления таких констант используется оператор, аналогичный тому, который применяется при описании
переменной:
[Public|Private] Const Имя_константы As Тип_данных = Значение
Для указания типа данных используются те же ключевые слова, что и при объявлении переменных. Например,
Public Const Pi As Double = 3.14159265358979
1.6.4. Выражения
Выражения – лексические единицы программы, которые могут содержать константы, переменные, указатели функций, связанные знаками операций и круглыми
17
скобками. Выражение представляет собой формальное правило для вычисления некоторого значения. Выражения входят в качестве составных частей в операторы.
В Visual Basic различают арифметические, строковые и логические выражения.
Все элементы, входящие в выражение, должные быть совместимы. Например, запись
1.76 + "Summa"
ошибочна, так как производится попытка сложения вещественного числа со строкой.
Арифметическое выражение является аналогом обычной алгебраической формулы, оно задает правило и определяет порядок выполнения операций при вычислении по
формуле. Арифметическое выражение состоит из следующих элементов: числовых
констант, переменных, указателей функций, знаков арифметических операций и круглых скобок. Частным случаем арифметического выражения является числовая константа, переменная, указатель функции. Значения арифметических выражений вычисляются
в соответствии с приоритетом арифметических операций:
 возведение в степень ( ^ );
 унарный минус (изменение знака числа);
 умножение ( * ) и обычное деление ( / );
 целочисленное деление ( \ );
 вычисление остатка от целочисленного деления ( Mod );
 сложение ( + ) и вычитание ( –).
Операции с одинаковым приоритетом выполняются в соответствии с порядком их
записи в выражении слева направо. Для изменения порядка вычисления арифметического выражения используются круглые скобки. Указатель функции является средством обращения к соответствующей функции и представляет собой одно числовое значение (вещественное или целое), являющееся значением этой функции от значения ее
аргументов. При вычислении по формулам некоторые математические функции встречаются очень часто. Для того чтобы программист каждый раз не составлял свою индивидуальную программу для их вычисления в трансляторе имеется набор специальных
функций, называемых встроенными (стандартными). При обращении к этим функциям необходимо указать идентификатор функции, а в скобках аргумент. Приоритет вычисления функций выше, чем у арифметических операций. Перечень основных встроенных математических функций Visual Basic представлен в табл. 1.2.
Таблица 1.2
Запись на Visual Basic
Выполняемые функции
Abs(X)
|X|
Atn(X)
arctg X
Sin(X)
sin X
Cos(X)
cos X
Tan(X)
tg X
Exp(X)
eX (e – основание натурального логарифма)
Log(X)
ln X
Sqr(X)
Квадратный корень
Rnd(X)
Датчик случайных чисел
18
X
Fix(X)
Отбрасывание дробной части
Int(X)
Наибольшее целое число, не превосходящее X
Round(X[,A])
Округление числа X с точностью до А десятичных знаков; если параметр А не задан, то происходит округление
до целого значения
Sgn(X)
Возвращает +1, если значение аргумента положительное,
-1, если – отрицательное и 0, если – нулевое
Аргумент во всех тригонометрических функциях задается в радианах, а не в градусах. При необходимости перевода значения, заданного в градусах, в радианы следует
использовать формулу:
Радианы = градусы   / 180
При вычислении арктангенса необходимо, чтобы аргумент находился в пределах
интервала: (-/2; /2).
Для перевода натуральных логарифмов в десятичные логарифмы следует использовать формулу:
Lg X = Ln X / Ln 10
При использовании датчика случайных чисел генерируется число в интервале
(0; 1), при этом аргумент Х в функции Rnd можно опустить. Для нахождения вещественных случайных чисел из интервала (a; b) следует использовать выражение:
(b – a) * Rnd + a.
Функции Fix и Int отбрасывают дробную часть числа и выдают его целую часть.
Различаются эти функции по способу округления отрицательных чисел: Int возвращает
ближайшее целое, меньшее или равное аргументу, а Fix – ближайшее целое число,
большее или равное аргументу. Например,
Int(3.75)
'Результат: 3
Fix(3.75)
'Результат: 3
Int(-3.75)
'Результат: -4
Fix(-3.75)
'Результат: -3
Int((b – a) * Rnd + a) 'Результат: случайное целое число из интервала (a;b)
В функции Round реализован принцип так называемого «бухгалтерского» округления. В математике «граница» округления до целого проходит по цифре 5 в десятых
долях числа. Значение 5.5 будет округлено до 6, а значение 5.49 – до 5. В свою очередь,
«бухгалтерское» округление предусматривает чередование четных и нечетных чисел в
подобном «граничном» округлении. При этом четные числа округляются в меньшую
сторону (по модулю), а нечетные – в большую сторону. Это сделано для повышения
точности бухгалтерских расчетов при значительном количестве выполняемых операций. Например,
Round(3.5, 0)
Round(2.5, 0)
Round(3.55, 1)
Round(3.45, 1)
'Результат: 4
'Результат: 2
'Результат: 3.6
'Результат: 3.4
При записи арифметических выражений следует соблюдать следующие правила:
19
 выражение записывать в строку без каких-либо надстрочных или подстрочных символов;
 нельзя опускать знак умножения между сомножителями;
 использовать только круглые скобки, число открывающих скобок всегда
должно равняться числу закрывающих скобок; «лишние» круглые скобки, если они использованы без нарушения правил, не играют никакой роли, поэтому, когда возникает
сомнение в последовательности выполнения операций, можно поставить «лишние»
скобки.
Примеры записи арифметических выражений:
1. a  b  (a + b) / (c + d)
cd
2. a  b
cd
 a * b / (c * d) или a * b / c / d
3. e x  y  ln x  y 3  3,6 y  exp(x+y)–log(sqr(abs(x-y^3)))-3.6*y
2
3
4. sin x  cos y
3
38.3  tg (  x)
 (sin(x)^2+cos(y^3))/(38.3 +tan(pi+x))^(1/3)
1.6.5. Программирование алгоритмов линейной структуры.
Оператор присваивания
Оператор присваивания является основным оператором любого языка программирования. Он предназначен для определения или переопределения значения переменной – присваивания ей нового значения. Синтаксис оператора такой:
Имя_переменной = выражение
Принцип работы оператора присваивания:
 вычисляется значение выражения;
 при работе с числовыми типами результат вычисления, если это необходимо,
преобразуется к типу переменной;
 полученный результат присваивается переменной, а прежнее ее значение, если таковое было, теряется.
Например, формула d = b + 2 на языке Visual Basic записывается в виде оператора присваивания:
d=b+2
При выполнении этого оператора к значению, которое в данный момент имеет
переменная b, прибавляется 2 и результат присваивается переменной d. Прежнее значение переменной d теряется. С помощью оператора присваивания можно как задавать
переменной начальное значение, так и изменять то значение, которое она уже имеет.
Например, оператор
n=n+1
увеличит значение переменной n на 1. Этот пример подчеркивает различие между символом присваивания и знаком равенства, используемым в математических формулах.
Очевидно, что запись n = n + 1 не имеет смысла, если ее рассматривать как обычное
уравнение.
В арифметическом выражении могут присутствовать величины разных типов,
например, складываются два числа: целое и вещественное. Результатом такого сложе20
ния будет величина вещественного типа, поэтому особое внимание следует обращать
на тип той переменной, которой он будет присвоен. Если в этом случае типы переменной и присваиваемого ей результата арифметического выражения не будут совпадать,
например, переменная будет типа Integer, а значение выражения – Single или Double, то
после выполнения данного оператора значение переменной будет получено путем автоматического округления результата. Например,
Dim a As Single, b As Single, c As Integer, d As Single
a = 3.7: b = 5.65
c=a/b
'Результат: 1
d=a/b
'Результат: 0.6548672
При составлении программы линейной структуры нужно руководствоваться
следующими правилами:
 все переменные, используемые в программе, должны быть объявлены;
 исходные данные должны быть определены в программе (заданы своими значениями) до момента их использования;
 последовательность записи операторов в программе определяет и последовательность их выполнения;
 для повышения эффективности программы, повторяющиеся части формул
целесообразно обозначать дополнительными переменными и записывать в виде самостоятельных формул;
 программу для удобства ее чтения целесообразно снабжать комментариями.
1.6.6. Пример разработки простейших программ
Пример 1.1. Разработать приложение (на основе Excel с использованием формы), в котором при вводе в текстовые поля исходных данных и последующем щелчке
мыши по командной кнопке Расчет, вычисляется объем пирамиды, в основании которой лежит равносторонний треугольник. На листе Excel должен быть чертеж пирамиды
(Вставка  Фигуры), формула вычисления объема (Вставка  Объект  Microsoft
Equation 3.0) и кнопка для запуска приложения.
Прежде чем приступать к созданию проекта, надо разработать алгоритм решения данной задачи. Программист сам должен знать решение задачи, ведь программа –
это инструкция по ее решению. Нельзя давать инструкцию, не зная как решать задачу.
В данном задании надо знать формулу для вычисления объема пирамиды:
1
V  S осн. h
3
Площадь основания, т.е. равностороннего треугольника вычисляется по формуле:
1
3 2
Sосн.  a 2 sin 60 
a
2
4
Итак,
3 2
a h
12
На рис. 1.8 представлен возможный вариант формы проекта.
V
21
Label
TextBox3
TextBox1
TextBox2
CommandButton
CommandButton
Label
Рис. 1.8
Программный код для кнопки Расчет можно записать так:
Private Sub CommandButton1_Click() ' Кнопка Расчет
Dim a As Single, h As Single, V As Single
a = Val ( TextBox1.Text )
' a – сторона треугольника
h = Val ( TextBox2.Text )
' h – высота пирамиды
V= Sqr ( 3 ) / 12 *a ^ 2 * h
' V – объем пирамиды
TextBox3.Text = V
End Sub
Val – функция перевода текста в числовой формат. Переменные a, h и V имеют
тип Single (вещественный с одинарной точностью), т.е. вычисления проводятся с числами с семью значащими цифрами, так как под переменную этого типа отводится
4 байта памяти. Если необходима большая точность вычислений, то переменные должны иметь другой тип, а именно Double. Под переменную типа Double компьютер отводит в памяти 8 байт, поэтому она может быть гораздо длиннее (максимум 15 значащих
цифр).
При выводе результата можно использовать функцию Format(expression, fmt),
где expression – форматируемое численное выражение, fmt – последовательность символов, определяющих отображение expression. Например, если надо вывести на печать
объем V c 3 цифрами в дробной части, оператор записи результата в текстовое поле
TextBox3 будет выглядеть так: TextBox3.Text = Format ( V, "##.###"). Символ "#" используется для задания количества значащих цифр в целой и дробной части выводимого числа. При V= 6.12874 в текстовое поле будет записано 6.129, а при V = 123.45 – значение 123.45. Целую часть числа Visual Basic показывает полностью в любом случае,
какова бы она ни была. Незначащие нули в начале и конце числа игнорируются. Для
вывода незначащих нулей используется формат "0.000". Если необходимо вывести
символы "+", ",","$" или пробел, то их размещают непосредственно в формате.
Программный
код
для
кнопки
Сброс
можно
записать
так:
Private Sub CommandButton2_Click()
' Кнопка Сброс
TextBox1.Text = " "
22
TextBox2.Text = " "
TextBox3.Text = " "
End Sub
В программах текстовое содержимое текстовых полей должно указываться в кавычках. В данном случае внутри кавычек пусто, что и требовалось.
Программный код для кнопки Выход можно записать так:
Private Sub CommandButton3_Click()
End
End Sub
' Кнопка Выход
Для того чтобы программа контролировала правильность написания используемых переменных, в начале программы в разделе General надо записать оператор Option Explicit.
Для удобства запуска приложения целесообразно создать кнопку на листе Excel.
Для этого надо вывести на экран панель Элементы управления (Разработчик 
группа Элементы управления  Режим конструктора  Вставить), вставить в любое место листа кнопку, в открывшемся диалоговом окне Назначить макрос объекту
нажать кнопку Создать и написать код для Кнопки1:
Sub Кнопка1_Щелчок()
UserForm1.Show
End Sub
Затем надо изменить надпись на кнопке, например Пуск. После выхода из Режима конструктора щелчок по кнопку Пуск запускает приложение (рис. 1.9).
Рис.1.9
23
Для того чтобы включить в файл написанный программный код, необходимо
при сохранении книги Excel выбрать тип файла Книга Excel с поддержкой макросов. В
этом случае расширение файла будет не .xlsx, а .xlsm.
1.6.7. Условный оператор
Вычислительный процесс называется разветвляющимся, если в зависимости от
выполнения определенных условий он реализуется по одному из нескольких, заранее
предусмотренных направлений. Каждое отдельное направление называется ветвью вычислений. Выбор той или иной ветви осуществляется уже при выполнении программы
в результате проверки некоторых условий и определяется значениями исходных данных и промежуточных результатов. Для программной реализации таких вычислений в
языке Visual Basic имеются специальные операторы передачи управления, которые дают возможность перейти из одного места программы в другое и изменить последовательный порядок выполнения ее операторов. К таким операторам относятся операторы
перехода, условные операторы и операторы выбора.
В Visual Basic есть два типа условного оператора – однострочный (линейный) и
многострочный (блочный).
Линейный оператор имеет две формы – безальтернативную и альтернативную.
Безальтернативная форма имеет следующий синтаксис:
If условие Then операторы
Альтернативная форма имеет такой синтаксис:
If условие Then операторы_1 Else операторы_2
Условие является логическим выражением, истинность которого оценивается.
После ключевых слов Then и Else может стоять один или несколько операторов. В последнем случае они разделяются двоеточием. При значении условия True выполняются
операторы_1, стоящие после ключевого слова Then, если же условие принимает значение False, то выполняются операторы_2, следующие за ключевым словом Else (альтернативная форма) или ничего не выполняется (безальтернативная форма). Все описанные параметры данной структуры должны быть записаны в одной строке. Например,
If A = 7 Then Beep
If x > 0 and x < 1 Then y = x^2:
z = x + exp(y) Else y = 0: z = 0
В первом примере выдается звуковой сигнал, если переменная А равна 7. Во втором примере, если x принадлежит интервалу (0;1), то вычисляются y=x2 и z=x+ex, в
противном случае значения переменных y и z обнуляются.
Блочный оператор IF … Then предоставляет такие же возможности, как и линейный оператор, но, если в зависимости от условия необходимо выполнить несколько
операторов, целесообразно использовать блочный синтаксис. Блочный оператор также
может быть безальтернативным и альтернативным. Структура безальтернативного
блочного оператора следующая:
If
условие Then
Блок операторов
End If
24
Здесь End If указывает на окончание блока оператора If.
Синтаксис альтернативного блочного оператора таков:
If
условие Then
Блок операторов 1
Else
Блок операторов 2
End If
Операторы If могут быть вложенными друг в друга. Структура вложенных операторов If следующая:
If
условие_1 Then
If условие_2 Then
Блок операторов 1
Else
Блок операторов 2
End If
Else
Блок операторов 3
End If
При использовании вложенных операторов If важно не перепутать варианты сочетания условий. Существует правило: альтернатива Else считается принадлежащей
ближайшему оператору If, не имеющему ветви Else.
В Visual Basic также предусмотрена конструкция для работы с несколькими операторами If. Эти операторы применяются в случае, когда необходимо рассмотреть еще
несколько условий в дополнение к исходному условию. Для этого служит конструкция
If … Then … ElseIf. Она позволяет проверить дополнительное условие, если исходное
условие принимает значение False. Синтаксис подобного оператора следующий:
If
условие_1 Then
Блок операторов 1
ElseIf условие_2 Then
Блок операторов 2
Else
Блок операторов 3
End If
Например,
If Обращение=1 Then
Label1.Caption="Глубокоуважаемый господин"
ElseIf Обращение=2 Then
Label1.Caption="Глубокоуважаемая госпожа"
ElseIf Обращение=3 Then
Label1.Caption="Глубокоуважаемые дамы и господа"
Else Label1.Caption="Люди"
End If
25
Для выбора одного из значений в зависимости от выполнения или невыполнения
некоторого условия используется условная функция IIf, имеющая такой синтаксис:
IIf(условие, значение_1, значение_2)
Эта функция возвращает значение_1, если условие истинно, и значение_2, если
условие ложно. Например,
Y= IIf ( x>0, sin(x), cos(x))
Если x>0, то переменной Y будет присвоено значение sin(x), в противном случае –
cos(x).
1.6.8. Операторы циклов
Циклы предназначены для многократного повторения одного или нескольких
операторов. В Visual Basic существуют два основных типа циклов – циклы со счетчиком (с известным числом повторений) и циклы с условием.
Цикл со счетчиком в Visual Basic еще называют циклом For … Next. Синтаксис
этого оператора следующий:
For Счетчик = Начальное_Значение To Конечное_Значение [ Step Шаг]
Операторы тела цикла
[Exit For]
Next [Счетчик]
В начале выполнения цикла значение переменной Счетчик устанавливается в Начальное_Значение. При каждом проходе переменная Счетчик увеличивается на 1 или
на величину шага (Step Шаг является необязательным параметром в заголовке цикла).
Когда значение этой переменной становится больше (при отрицательном шаге – меньше) конечного значения, цикл завершается, и выполняется следующий по порядку оператор. Exit For – оператор досрочного выхода из цикла (необязательный). Этот оператор используется, если необходимо "аварийно" завершить цикл при выполнении какого-либо дополнительного условия. Число выполнения цикла можно определить по
формуле: (Конечное_Значение – Начальное_Значение) / Шаг +1
Примером цикла с известным числом повторений может служить вычисление
значения N! (N! = 1·2·3·…·N). Значение N должно быть определено до оператора цикла.
F=1
For I=2 To N
F=F*I
Next I
В следующем примере происходит суммирование квадратов четных чисел от 2 до
100. Цикл прерывается досрочно, когда значение переменной Sum станет больше 1000.
Sum=0
For J=2 To 100 Step 2
Sum=Sum+J^2
If Sum>1000 Then Exit For
Next J
26
Оператор цикла с условием Do … Loop используется для организации циклов с
неизвестным числом повторений (с предусловием и с постусловием). Для организации
цикла с предусловием этот оператор может использоваться в двух модификациях:
Do While условие продолжения цикла
Операторы тела цикла
Loop
и
Do Until условие прекращения цикла
Операторы тела цикла
Loop
В первом случае операторы тела цикла выполняются, пока заданное условие продолжения цикла имеет значение True. Во втором случае операторы тела цикла выполняются до тех пор, пока условие прекращения цикла не получит значения True.
Для организации цикла с постусловием оператор Do … Loop также может использоваться в двух модификациях:
Do
Операторы тела цикла
Loop While условие продолжения цикла
и
Do
Операторы тела цикла
Loop Until условие прекращения цикла
Условие выполнения или прекращения цикла здесь проверяется в конце, поэтому этот цикл обязательно выполняется хотя бы один раз. Например,
Eps = Val(Text1.Text):
S = 0: N = 1
Do
S = S + 1/N:
N = N + 1
Loop Until 1/N < Eps
В данном примере суммирование обратных величин натуральных чисел проводится до тех пор, пока очередное слагаемое не станет меньше заданного положительного значения Eps.
Иногда необходимо прервать цикл Do … Loop, если выполняется какое-либо
дополнительное условие. Это может быть выполнено с помощью оператора Exit Do.
Для остановки бесконечного циклического процесса надо нажать клавиши Ctrl+Break.
1.6.8. Пример разработки программ разветвляющихся и циклических
вычислительных процессов
Пример 1.2. Разработать приложение (на основе Excel с использованием формы), реализующее табулирование функции
 6 x 2  sin x , если x  0
f ( x)  
3
ln x  1  3,8tg x, если x  0
при изменении
аргумента х в диапазоне [x0,xk] с шагом h с использованием элементов управления
27
ListBox для отображения значений аргумента и функции. На листе Excel должен быть
записано условие задания и кнопка для запуска приложения.
Табулирование функции – это построение таблицы значений функции для всех
значений аргумента (с учетом шага) в указанном диапазоне, поэтому задача состоит в
вычислении и выводе на печать значений функции при х=x0, x0+h, x0+2h, …, xk.
Форма представлена на рис. 1.10.
Программный код для кнопки Расчет можно записать так:
Private Sub CommandButton1_Click()
' Кнопка Расчет
Dim x0 As Single, xk As Single, h As Single, x As Single, f As Single
x0 = Val(TextBox1.Text)
xk = Val(TextBox2.Text)
h = Val(TextBox3.Text)
For x = x0 To xk+h/2 Step h
If x>= 0 Then
f = 6 * x^2 * sin(sqr(x))
Else
f = log(abs(x – 1)) + 3.8 * tan(x)^3
End If
ListBox1.AddItem x
ListBox2.AddItem f
Next x
End Sub
TextBox1
TextBox2
Label
TextBox3
ListBox2
ListBox1
CommandButton
CommandButton
Label
Рис. 1.10
В операторе цикла в качестве конечного значения записано выражение xk+h/2, а
не переменная xk. Причина в незначительных погрешностях, которые допускает компьютер при действиях с вещественными числами. При многократном прибавлении шага значение счетчика х перестает быть точным. Так вместо значения х=1 может получиться х=1.0000001 и, если xk=1, то цикл будет завершен, и значение функции при х=1
не будет вычислено. При использовании целых типов все результаты будут абсолютно
точными целыми числами.
28
Для добавления элементов в список используется метод AddItem. Допускается
использование функции Format. Например, ListBox2.AddItem Format(y, "0.000").
Элементы поля списка по умолчанию отображаются в одном столбце (свойство
Columns имеет значение 0). Если высота объекта ListBox1 или ListBox2 не позволяет
полностью отобразить все элементы списка, то автоматически появляется вертикальная
полоса прокрутки. На этапе проектирования, при необходимости, можно изменить число столбцов с помощью свойства Columns. Заполнение столбцов в этом случае осуществляется последовательно: сначала заполняется первый столбец, потом второй и т.д.
При Columns  1 применяется горизонтальная прокрутка.
При запуске на выполнение программ, содержащих циклы, можно столкнуться с
проблемой "зацикливания". В данном примере это произойдет, если шаг окажется равным 0. В этом случае программа никак не реагирует ни на мышку, ни на клавиши клавиатуры. Для прерывания работы любой программы, в том числе и зациклившейся, надо нажать комбинацию клавиш Ctrl и Break. Программа прерывает свою работу, но не
заканчивает. Visual Basic переходит в режим прерывания, и оператор программы, на
котором она была прервана, выделяется желтым цветом. Если снова запустить программу, она продолжит работу с прерванного места, а чтобы начать сначала, необходимо завершить работу программы обычным способом.
В программном коде процедуры для кнопки Сброс необходимо предусмотреть
очистку всех текстовых полей и списков. Удаление всех имеющихся значений в списке
можно осуществить с помощью метода Clear. Например, ListBox1.Clear.
На рис. 1.11 показан результат работы программы на отрезке [-:] с шагом /6.
Рис. 1.11
29
Для того чтобы включить в файл написанный программный код, необходимо при сохранении книги Excel выбрать тип файла Книга Excel с поддержкой макросов (расширение файла будет.xlsm).
Задания
Задание 1
Разработать приложение (на основе Excel с использованием формы), реализующее решение задачи своего варианта. На листе Excel должно быть записано условие
задания, формула (или формулы), по которой проводится вычисление, чертеж и кнопка
для запуска приложения (см. Пример 1.1.). Подготовить тестовый пример для проверки
работы программы
Варианты задания
0.
Вычислить площадь кольца, внутренний диаметр которого d, а внешний
.
D.
1. Вычислить полную поверхность пирамиды, в основании которой лежит квад.
рат со стороной b. Высота пирамиды h.
2. Вычислить объем пирамиды, в основании которой лежит квадрат со стороной
b. Высота пирамиды h.
.
3. Вычислить объем прямой призмы, в основании которой лежит прямоуголь.
ный треугольник с катетами a и b. Высота призмы h.
4. Вычислить полную поверхность прямой призмы, в основании которой лежит
прямоугольный треугольник с катетами a и b. Высота призмы h.
√
.
5. Вычислить полную поверхность прямой призмы, в основании которой лежит
√
равносторонний треугольник со стороной b. Высота призмы h.
.
6. Вычислить объем прямой призмы, в основании которой лежит равносторонний треугольник со стороной a. Высота призмы h.
√
.
7. Вычислить объем и полную поверхность куба, ребро которого b.
,
.
(
8. Вычислить объем цилиндра. Высота цилиндра h, радиус основания r.
(
.
9. Вычислить полную поверхность цилиндра. Высота цилиндра h, радиус основания r. (s = 2r2 + 2rh)
Задание 2
Разработать приложение (на основе Excel с использованием формы), реализующее табулирование функции f(x) на отрезке [x0; xk] с шагом h с использованием элементов управления ListBox для отображения значений аргумента и функции. На листе
Excel должен быть записано условие задания и кнопка для запуска приложения (см.
Пример 1.2).
30
Варианты задания
 7, 2 101,3  x  1
, если x  0

sin x
0. f ( x )  
cos
e
; x  [ 3; 2 ], h  0,5

 3 x  tg    x , если x  0


 30
2 x  ln cos 5 4  x , если x  0
1. f ( x)  
; x  [2; 2], h  0,25

lg x 2
3
, если x  0
 3,5ctg x 
x5

 sin4 x2  x2
, если x  0


x 1
2. f ( x)  
; x [; ], h 
 4
6
 x  0,96x  1 , если x  0
3
 cos x  2,37
x 1

2 x
 x  cos x 2  e , если x  0
3. f ( x)  
; x [2; 2], h  0,25

x
1

3
 ln tg      x  , если x  0
6
x


 3,56  x  3 x  1 , если x  0
4. f ( x)  
x [3; 3], h  0,5
 7,2  x  ln(sin 2 x 3 )

,
если
x
0

x 1

e x  3 x  1,7  x  5 1, 4 , если x  1
5. f ( x )  
; x  [0; 2], h  0,2

 
x

2
,
79

tg

x
,
если
x

1



2 

 x  2

 1   arctg x 4 , если x  0

3

x

6. f ( x )   cos
; x  [  2 ; 2  ], h 

3
 ln sin x  2,306 x 2 , если x  0

x  1,5
 e  2 x x 1, 2 , если x  0
7. f ( x )  
; x  [  2; 2 ], h  0 , 25
x

4


13
x
ln
tg
,
если
x
0

2

2
x
  ( x  2, 4 )
 ln tg , если x  0
e
6
8. f ( x)  
; x [3; 3], h  0,5
 x  3 x  2  3x

, если x  0

x 1
2
31
 2 , 67  ln sin x 2

, если x  0
9. f ( x )  
cos
1

x
;

1 3 x 1

, если x  0
 tg
x

x  [   ;  ],
h

6
Контрольные вопросы
1. В чем заключаются особенности среды программирования VBA?
2. Какие окна входят в интегрированную среду разработки VBA?
3. Какова последовательность разработки приложений в VBA?
4. Как создать форму и установить ее свойства?
5. Как добавить новый элемент управления на панель ToolBox?
6. Какими способами можно добавить к форме элемент управления?
7. Как установить требуемые свойства объекта?
8. Как установить требуемые свойства для группы однотипных объектов?
9. Что такое метод объекта?
10. Что такое событие?
11. Что такое программный код объекта?
12. Какой оператор должен присутствовать в разделе глобальных объявлений,
чтобы исключить ошибки в случае появления неявно объявленных переменных?
13. Перечислите типы данных, поддерживаемые VBA.
14. Каково различие между линейным и блочным оператором If?
15. В каких случаях используются вложенные операторы If?
16. Как определяется цикл с известным числом повторений?
17. Что такое тело цикла?
18. В чем заключается особенность программирования циклических процессов с
параметрами вещественного типа?
19. Можно ли выйти из цикла до достижения конечного значения переменной
цикла?
20. В каких случаях используются операторы цикла с условием?
21. Всегда ли можно вместо оператора For … Next использовать оператор цикла
с предусловием?
22. Как прервать бесконечный цикл?
32
1/--страниц
Пожаловаться на содержимое документа