400 ЧАСТЬ VIvisual BASIC FOR applications (VBA) Глава 6.1 Создание приложений с помощью VBA Возможности Visual Basic Visual Basic является мощным программным средством, с помощью которого можно реализовать широкий спектр практических задач. Основное достоинство этого языка программирования состоит в том, что он оптимально сочетает в себе простоту использования, доступность и большой набор разнообразных возможностей, позволяющих охватить все основные области программистской деятельности. В названии этого языка слово Visual означает способ, при помощи которого данным программным средством создается графический пользовательский интерфейс (Graphical User Guide, или сокращенно GUI). Вместо того чтобы описывать в программе, где и каким образом появится на экране тот или иной объект, программист может просто расположить его в нужном месте еще на этапе разработки своего приложения. В качестве таких "заготовок" в подавляющем большинстве случаев используются встроенные элементы управления, то есть уже созданные объекты с заданными наборами свойств и методов. Программист может изменять значения тех или иных свойств у выбранного объекта, а также описывать для него разнообразные методы. Кроме этого, имеется возможность обработки программистом различных событий, которые могут возникать в результате каких-либо действий пользователя.^ Основные возможности языка Visual Basic:401 • Реализация разработчиком максимально гибкого и удобного интерфейса для своего приложения, который сможет удовлетворить потребности даже самого взыскательного пользователя; • Обработка событий мыши и клавиатуры, вывод на экран различных графических изображений; • Использование стандартных диалогов; • Обработка файлов и каталогов на жестком диске; • Доступ к базам данных. Во всех приложениях пакета Microsoft Office 2000 используется единая система программирования, которая носит название ^ Visual Basic for Applications (VBA). Языком программирования в данной системе является Visual Basic, а среда программирования реализована в виде Редактора Visual Basic (VBE), который может быть открыт из любого приложения пакета Office.^ Редактор Visual Basic (VBE) Для того чтобы запустить редактор VBE, необходимо выполнить следующую последовательность действий: 1. Открыть приложение пакета Microsoft Office 2000, например, Word. 2. Выполнить команду Сервис \ Макрос Редактор Visual Basic. После выполнения этих действий на экране откроется окно редактора Visual Basic (см. рис. 6.1). Основными элементами VBE являются:Меню. В состав этого элемента входят все команды, которые используются при создании приложений в редакторе VBE. Среди пунктов меню есть как стандартные, присущие большинству окон Windows (File, Edit, View, Window, Help), так и пункты, при помощи которых разработчик может запускать или отлаживать свое приложение (Debug, Run). На рис. 6.1 Меню расположено в верхней части VBE под заголовком окна. Tool Bar (Панели инструментов). Эти элементы представляют собой различные группы кнопок с изображенными на них иконками. При помощи данных кнопок можно выполнять те или иные операции, предусмотренные в среде разработки, не используя при этом меню; то есть выполнять одно действие - нажатие соответствующей402кнопки - вместо нескольких, в случае выполнения этой же операции при помощи меню. На рис. 6.1 панели инструментов расположены в верхней части VBE, под элементом Меню. В VBE существует четыре основные панели инструментов: • ^ Debug (Отладка) • Edit (Правка) • Standard (Стандартная) • UserForm (Пользовательская форма) По умолчанию отображается только панель Standard. Для того чтобы добавить или удалить какую-либо панель инструментов, следует выбрать команду ToolBars из пункта меню View (или подвести указатель мыши к строке меню и щелкнуть правой кнопкой мыши, вызывая контекстное меню). После этого появится окно со списком основных панелей инструментов (см. рис. 6.2), причем некоторые из них могут иметь слева пометку, что означает наличие их на экране. Выбор панели из списка приведет либо к ее появлению (если радом с названием не было пометки), либо к исчезновению с экрана (если пометка присутствовала).403 Далее будут рассмотрены панели среды разработки с кратким описанием их назначения и перечислением основных функций.^ Панель Debug (см. рис. 6.3) предназначена для выполнения отладки (тестирования) программы с исправлением возникающих ошибок (пункт меню Debug). В Visual Basic предусмотрены широкие возможности для отладки приложения, такие как отслеживание текущих значений переменных программы, пошаговое выполнение приложения (на каждом шаге выполняется один оператор), временная остановка выполнения программы на определенном шаге и т. д. Перечень всех элементов панели Debug представлен в табл. 6.1.404Панель Edit (см рис. 6.4) предназначена для работы с текстом программы (пункт меню Edit). Эта панель реализует возможности простейшего текстового редактора: копирование и вырезание текста в буфер обмена, вставка из буфера, поиск или замена слов и фраз в тексте программы и т. д. Список всех элементов панели Edit представлен в табл. 6.2.405406Панель VserForm (см. рис. 6.5) предназначена для перемещения элементов управления в форме, изменения их размеров, выравнивания относительно границ формы (пункт меню Format). Перечень всех элементов панели Form Editor представлен в табл. 6.3.407 В случае выравнивания элементов формы относительно эталона (пункт Align Lefts в табл. 6.3) при выполнении одной из возможных команд (см. рис. 6.6) изображение кнопки выравнивания на панели Form Editor изменяется в соответствии с выбранным пунктом. Возможны следующие команды:^ Lefts - выравнивание всех выделенных объектов относительно левого края эталонного объекта;Centers - выравнивание по центру эталона относительно вертикальной оси;Rights - выравнивание относительно правого края эталона;Tops - выравнивание по верхней границе эталонного объекта;408Middles - выравнивание по центру эталона относительно горизонтальной оси;Bottoms - выравнивание относительно нижнего края эталонного объекта. Расположение элементов формы относительно ее центра (пункт Center Horizontally в табл. 6.3), которое задается при помощи одной из возможных команд (см. рис. 6.7), приводит к изменению изображения соответствующей кнопки на панели Form Editor аналогично предыдущему пункту (см. рис. 6.6). При этом возможны следующие команды:Horizontally - выравнивание относительно вертикальной оси. Vertically — выравнивание относительно горизонтальной оси. Аналогично предыдущим рассмотренным возможностям преобразование размера выбранных элементов формы (пункт Make With Same Size в табл. 6.3) также приводит к изменению соответствующей кнопки в панели Form Editor. В данном случае возможен выбор одного из следующих пунктов (см. рис. 6.8):^ Width — приведение ширины выделенных объектов к эталонной;Height - преобразование высоты выделенных объектов к высоте эталона;Both - приведение ширины и высоты объектов на форме к эталонным размерам.Панель Standard, или стандартная панель инструментов, является основной в VBE. С ее помощью можно выполнить широкий спектр действий, которые реализованы в пунктах меню File (Файл), Insert (Вставка), Debug (Отладка) и Run (Запуск). Стандартная панель обычно расположена под строкой409меню. Однако при помощи мыши ее можно перетаскивать в любые другие области экрана, при этом панель приобретает вид окна (см. рис. 6.9). В табл. 6.4 приведены основные элементы панели Standard и их назначение.410411Properties (Окно свойств). Используется для того, чтобы изменять свойства текущего объекта, например, документа Word (см. рис. 6.11). В VBE окно свойств, как правило, находится в левом нижнем углу (см. рис. 6.1).Code (Окно редактирования кода). Предназначено для создания или редактирования кода программы (см. рис. 6.12). Для любой формы или модуля проекта окно редактирования кода можно открыть с помощью команды View \ Code.412Project (Окно проектов). Используется для удобства работы с элементами проекта (формами и модулями), а также в случае необходимости работы с несколькими проектами одновременно (т. е. если VBE был запущен сразу из нескольких одноименных приложений, например, из нескольких документов Word) (см. рис. 6.13). Содержимое этого окна отображает иерархические структуры, в которых вершинами всех иерархий являются открытые в данный момент проекты, а исходящие от них ветви являются составными частями проектов (например, формы или модули). В VBE окно проектов обычно расположено над окном Properties (см. рис. 6.1).^ Управление проектами в VBE Проектом называется набор модулей, которые используются для разработки приложения. В состав проекта входят модули следующих категорий: • Объекты приложения; • Формы; • Стандартные модули; • Модули классов.Объекты приложения Office. Представляют собой один или несколько документов того приложения Office, из которого был открыт редактор Visual Basic. Например, если таким приложением является Word, то категория называется Microsoft Word Objects.413Формы. В данной категории находятся пользовательские формы, составляющие их элементы, а также объявляемые переменные, константы, процедуры обработки событий и пользовательские процедуры и функции. Для каждой формы проекта создается отдельный модуль.Стандартные модули. Их содержимым являются процедуры, функции, а также объявляемые переменные и константы, которые можно использовать в других модулях данного приложения.Модули классов. Предназначены для создания разработчиком собственных классов с описанием их методов и свойств. Модули классов похожи на модули форм, но, в отличие от них, не имеют отображаемого пользовательского интерфейса. Все открытые проекты и список составляющих их файлов можно увидеть в окне Project (см. рис. 6.13), кнопки которого позволяют выполнять следующие действия: Открывать окно кода для выбранной формы; Показывать выбранную форму; Выводить или прятать категории проекта, показываемые в виде папок (например, папка ^ Forms). Для того чтобы добавить форму (или какой-либо другой объект) в открытый проект, необходимо в меню Insert выбрать пунктUser Form (пользовательская форма) или нажать кнопку на стандартной панели. При необходимости удаления какого-либо элемента из проекта следует: 1. Выбрать в окне Project название соответствующего элемента (формы или модуля). 2. Выполнить команду Remove меню Project или контекстного меню выбранного элемента.414^ Глава 6.2 Основы программирования на УВ6 Работа с переменными Переменные в программе создаются для того, чтобы хранить какие-либо данные. Перед тем как использовать переменную, ее необходимо описать. Данное действие осуществляется при помощи оператора следующего вида: Dim переменная [As mun] В этом операторе: Dim - ключевое слово, свидетельствующее о том, что осуществляется объявление переменной; As - служебное слово, используемое при обозначении типа данных для объявляемой переменной;Переменная — имя переменной, которая объявляется;Тип - тип данных для указанной переменной. В одном операторе можно одновременно описать несколько переменных, указывая каждую последующую через запятую. В языках программирования ключевыми (служебными) словами называются такие слова, которые используются только для описания каких-либо операторов и не могут быть использованы программистом ни в каких других целях. В частности ключевые слова нельзя использовать в качестве имен для переменных в программе. Редактор Visual Basic настроен таким образом, что при написании текста программы в окне кода все используемые ключевые слова по умолчанию будут обозначаться синим цветом, в то время как весь остальной текст изображается черным. В этом случае программист легко может определить, являются ли те слова, которые он планирует использовать, например, в качестве имен для переменных, ключевыми словами Visual Basic или нет. Существует несколько ограничений на имена используемых в программе переменных: • имя должно начинаться только с латинской буквы; • в имени не должно быть точек, пробелов и русских букв; • необходимо соблюдать уникальность имен переменных в рамках одной рассматриваемой процедуры: • количество символов в имени не должно быть более 255. -415Зачастую для повышения информативности используемых переменных программисты используют в именах так называемые префиксы, которые определяют принадлежность сохраняемых в них данных к определенному типу (см. табл. 6.5). В том случае, когда при описании переменной программист не указывает тип данных, например: Dim Variableто создаваемая переменная автоматически будет иметь тип Variant (произвольный). Это означает, что в ней может храниться информация любого типа, однако данная переменная будет занимать значительно больше места в памяти, чем переменная любого другого типа. Поэтому, если заранее известно о том, какого рода информация должна храниться в описываемой переменной, то для нее следует указывать такой тип из всех подходя-416щих, который требует меньше всего места в памяти. В табл. 6.6 приведено описание всех типов данных, которые используются в Visual Basic.417 Рассмотренный способ объявления переменных носит название явного. Кроме приведенного варианта с использованием ключевого слова Dim, существует еще несколько способов: Private переменная [As тип] Static переменная [As тип] Public переменная [As тип] В этих операторах применяются следующие ключевые слова Visual Basic: Private, Static, Public, которые влияют на область видимости объявляемой переменной (область программы, в которой возможно ее использование). Другими словами, переменная может использоваться только в конкретной процедуре, во всех процедурах какого-либо определенного модуля или в любой процедуре данного проекта. В том случае, когда переменная объявляется с ключевым словом Dim, то это означает, что областью ее использования будет только та процедура, в которой она была описана. Такие переменные называются локальными (закрытыми). При этом после выполнения данной процедуры их значения будут потеряны. Эти переменные удобно использовать, к примеру, в качестве счетчиков циклов. Если в нескольких процедурах необходимо выполнять циклы, то счетчикам для них можно давать одно и то же имя, например, intCounter. В этом случае не будет возникать конфликт имен, который происходит, когда в программе объявляются несколько переменных с одними и теми же именами, имеющими одинаковую область видимости. Когда объявление переменной в процедуре осуществляется при помощи ключевого слова Static, то она также будет локальной. Отличие от оператора Dim заключается в том, что в этом случае после очередного выполнения данной процедуры ее последнее значение не будет потеряно. Этот оператор удобно использовать при необходимости сохранения значения какой-либо локальной переменной после очередного выполнения процедуры. Если нужно, чтобы значение переменной было доступно в нескольких процедурах одного модуля, то в этом случае следует использовать оператор Private. Причем объявление переменной необходимо осуществлять в разделе Declarations текущего модуля (см. рис. 6.14).418 Когда нужно использовать какую-либо переменную, которая доступна всем модулям данного проекта, то ее следует объявлять с использованием ключевого слова Public. Такие переменные называются глобальными (открытыми) и являются противоположностью тех, которые объявляются оператором Private. Глобальные переменные также должны описываться в разделе Declarations открытого модуля. Существует еще один способ объявления переменных, при котором вместо ключевого слова As с последующим указанием типа используется так называемый суффикс типа данных, который добавляется в конец имени описываемой переменной. Перечень всех суффиксов и соответствующих им названий типов приведен в табл. 6.7.419 Если при описании переменной использовать приведенные выше суффиксы, то в этом случае оператор для объявления открытой переменной целого типа будет выглядеть следующим образом: Public Counter%. Итак, для определения типа переменной можно использовать как префиксы, так и суффиксы. Выбор того или иного способа всецело зависит от предпочтений программиста.^ Использование констант Наряду с переменными для хранения информации в программе можно использовать константы. Их особенностью является то, что при описании в программе какой-либо константы ей присваивается определенное значение, которое в дальнейшем не может быть изменено другими операторами. Существует две разновидности констант: встроенные и пользовательские. Встроенные константы Visual Basic предлагаются самой системой и предназначены для хранения самой разнообразной информации: коды "горячих" клавиш, используемые цвета и т. д. Все они имеют префикс vb, например: vbWhite. Для того чтобы уточнить значение той или иной встроенной константы, а также ее название, следует открыть окно ^ Object Browser, в котором можно найти всю необходимую информацию (см. рис. 6.15). Для этого необходимо или нажать соответствующую кнопку на стандартной панели инструментов, или выбрать команду Object Browser в меню View, или нажать клавишу F2. Пользоваться встроенными константами удобно во многих случаях по той причине, что намного легче запомнить название константы, например, vbWhite, чем число 16777215. Часто возникает необходимость описывать в программе собственные константы, которые называются пользовательскими, присваивая им определенные значения. Для объявления таких констант используется оператор, аналогичный тому, который употребляется при описании переменной:^ Const константа [As тип] = значение В этом операторе: Const - ключевое слово, которое показывает, что осуществляется объявление константы;420 As - ключевое слово для обозначения типа данных объявляемой константы;Константа - имя описываемой константы;Тип - тип данных для объявляемой константы;Значение - присваиваемое константе значение указанного типа. Ниже приведены примеры объявления констант различных типов: Const bInFlag As Boolean = False Const intMax As Integer = 1024 Const stxMessage = "Завершение работы" При помощи одного оператора можно объявить несколько констант, в этом случае они должны быть перечислены через запятую, например: Const intMin = 0, intMax = 1000 При объявлении констант их область видимости задается аналогично переменным. Если константа была создана в процедуре,421то областью ее видимости является только эта процедура. В случае необходимости доступа к константе из всех процедур модуля ее нужно объявлять в разделе Declarations данного модуля, указывая в начале оператора ключевое слово Private. Если же требуется обеспечить доступ к константе из всех процедур проекта, то при ее объявлении в разделе Declarations следует использовать ключевое слово Public. Например: Private Const intMax = 4096 Public Const intMin = 1024^ Типы данных Object и Variant Тип Object. В том случае, когда необходимо работать с различными объектами, удобно использовать тип Object (объектный). Переменная данного типа содержит ссылку на тот или иной объект разрабатываемого приложения или других приложений и представляет собой 4-байтный адрес соответствующей области памяти. Присвоение объектной переменной какого-либо значения выполняется при помощи оператора Set. Например: Dim objA As Object Set objA = Labell В приведенном примере переменной objA присваивается ссылка на объект-метку Labell, принадлежащий одному из стандартных классов Visual Basic, а именно: классу Label. В подобных случаях, когда для описания объекта используется не созданный разработчиком, а уже имеющийся класс, при объявлении переменной следует указывать стандартный тип: Dim objA As Label objA = Labell Перечень стандартных классов Visual Basic, а также их описание и список свойств каждого класса можно найти в разделе Classes окна Object Browser (см. рис. 6.16).422 Тип Variant. Если в процессе работы программы определенная переменная должна содержать значения различных типов, то следует использовать тип Variant (произвольный), который устанавливается по умолчанию для описываемой переменной. При этом во время выполнения различных операций нет необходимости следить за тем, значение какого типа в данный момент в ней находится, так как необходимые преобразования осуществляются автоматически. Например: Dim vntAny ' ^ Tim Variant vntAny = "144" ' Результат: строка "144" vntAny = vntAny /12 ' Результат: число 12 Однако следует учитывать тот факт, что в случае выполнения арифметических операций в переменной типа Variant должно находиться число (или строка, содержащая число), иначе при работе программы возникнет ошибка несовпадения типов Type Mismatch. Значение, которое присваивается переменной типа Variant, определяет способ его обработки при выполнении различных423 операций, а также внутреннее представление. В частности если данное значение является числом, то оно обрабатывается как принадлежащее тому типу данных, который в этом случае является наиболее подходящим. Например: Dim vntA ' тип Variant/Empty vntA = "5" ' тип Variant/String vntA = 5 ' типVariant/Integer vntA =5.5 ' тип Variant/Double Для того чтобы узнать, какое внутреннее представление употребляется для того или иного значения, следует использовать функцию VarType, которая возвращает числовые коды в зависимости от применяемого типа данных (см. табл. 6.8). Например: Dim vntA Dim intCode As Integer vntA = "7" intCode = VarType(vntA) ' intCode = 8424 В зависимости от полученного кода можно выполнять те или иные действия. Например, целочисленные значения в переменных Variant хранятся как Integer. Если какое-либо из этих значений не выходит за пределы интервала, определяемого типом Byte, т. е. [0; 255], то для экономии памяти и повышения скорости обработки можно осуществить преобразование к более компактному типу (см. табл. 6.9): Dim vntA ' Variant vntA = 200 ' Variant/Integer If VarType(vntA) = 2 Then vntA = CByte(vntA) ' Variant/Byte End If Зачастую при работе приложений необходимо преобразовывать содержимое переменных Variant из строки в число, например, при вводе пользователем данных в диалоговом окне, однако в этом случае может возникнуть ошибка несовпадения типов. Чтобы про-425верить, является ли преобразуемое значение числом (или строкой, которую можно представить как число), следует использовать функцию IsNumeric, которая возвращает значение True или False, в зависимости от результата проверки (см. табл. 6.10). Обычно IsNu-meric используется в управляющих конструкциях, как и рассмотренная выше функция VarType. Помимо того, что переменные типа Variant могут хранить значения любого другого типа, для них предусмотрены еще три специальных значения:Empty. Данное значение в начале выполнения программы автоматически присваивается переменной, объявленной как Variant, причем оно может трактоваться по-разному, в зависимости от того, в каком выражении присутствует рассматриваемая переменная. Если она используется при выполнении арифметической операции, то значение Empty эквивалентно нулю, т. е. О, если в строковом выражении - то пустой строке, т. е. "". Для того чтобы выяснить, содержит ли переменная типа Variant значение Empty, следует использовать функцию IsEmpty, например: Dim vntA ' vntA = Empty If IsEmpty(vntA) Then vntA = "" ' vntA = "" Данное значение может быть присвоено в программе переменной типа Variant так же, как и любое другое, например: vntA = Empty426Null. Это значение в большинстве случаев применяется при обработке баз данных и имеет несколько особенностей: • если в каком-либо выражении одним из составляющих является Null, то результатом всего выражения также будет Null, например: Dim vntA ' vnfcA = Empty vntA = Empty + Null * 5 ' vntA = Null • в том случае, когда в качестве параметра функции используется значение Null или переменная, которая равна Null, то вызываемая функция также возвратит значение Null (если этот параметр принимает участие в вычислении результата функции). Проверка на значение Null переменной типа Variant осуществляется функцией IsNull, которая аналогична функции IsEapty, рассмотренной выше. Данное значение может быть присвоено только переменной типа Variant, например: Dim vntA vntA = Null Если же значение Null будет присвоено переменной другого типа, то компилятор выдаст сообщение об ошибке.Error. Данное значение применяется в том случае, если необходимо предусмотреть возможность возникновения ошибки в используемой процедуре. При этом компилятор не выдает стандартных сообщений об ошибке, что позволяет разработчику при ее возникновении выполнять те или иные действия по своему усмотрению. Преобразование полученного кода ошибки в Error осуществляется с помощью функции CVErr, аргументом которой является числовое значение.^ Простейшие конструкции и операторы Используемые символы. В языке Visual Basic при создании программ могут использоваться следующие символы: • прописные и строчные буквы латинского и русского алфавитов;427 • цифры от 0 до 9; • знаки: . (точка), , (запятая), ; (точка с запятой), ' (апостроф), " (кавычки), ( ) (круглые скобки); • символ пробела; • знаки арифметических операций: + (плюс), - (минус), * (умножение), / (деление), ^ (возведение в степень); • знаки сравнения: (больше), = (равно), = (не меньше, используется вместо знака ), (не равно, используется вместо знака ); • знаки: @ (коммерческое "эт"), # (диез), $ (знак доллара), % (процент), & (амперсанд, или коммерческое "и"), \ (косая черта слева направо), _(знак подчеркивания), ! (восклицательный знак), ? (вопросительный знак).Представление чисел. Числа в Visual Basic представляют собой последовательность цифр со знаком + или - (знак + обычно не употребляется), например: +7, -18, 32. Если в числе имеется дробная часть (т. е. десятичная дробь), то она отделяется от целой части точкой. При этом если целая часть равна нулю, то ее можно опустить, например: 0.5, -5. 68, -. 12. Описанная форма записи чисел носит название основной. Кроме основной, возможна также запись чисел в экспоненциальной форме (в форме с порядком). Например, десятичное число 0,0095 или его эквивалент 9,5 • 10-3 на языке Visual Basic может быть записано в следующем вице: 9. 5Е-4. Аналогичным образом число 52000000 можно записать так: 52Е+6 или 52Е6. Латинская буква Е и находящееся за ней число в данной форме записи называется порядком, перед которым обязательно должно быть записано число в основной форме. Вместо буквы Е при указании порядка можно также использовать букву D, однако после компиляции этот символ будет автоматически исправлен на Е.Арифметические выражения. При использовании в программе каких-либо арифметических вычислений, их представление на языке Visual Basic схоже с математическим. Выражения могут содержать числа, переменные, функции, которые соединены между собой знаками арифметических действий (см. табл. 6.11).428 Кроме обычных арифметических действий - сложения (+), вычитания (-), умножения (*), деления (/) и возведения в степень (^),- в языке Visual Basic можно также выполнять целочисленное деление (\) и определять остаток от деления при помощи оператора Mod. Например:Листинг 6.1. Применение арифметических операторов. Dim m, n, x m = 5 n = 2x = m / n ' Результат; x = 2,5 x = m \ n ' Результат: х = 2 x = m Mod n ' Результат; x = 1 При наличии в выражении нескольких арифметических операций порядок их выполнения определяется правилами приоритета: 1. возведение в степень (^) 2. умножение и деление - обычное и целочисленное (*, /, \) 3. остаток от деления (оператор Mod) 4. сложение и вычитание (+, -)Операции с одинаковым приоритетом выполняются в соответствии с порядком их записи в операторе слева направо. Если в выражении какие-либо операции заключены в скобки, то независимо от приоритета они выполняются в первую очередь. Следует отметить тот факт, что в арифметических выражениях могут присутствовать величины различных типов, например,429складываются два числа: целое и вещественное. Результатом такого сложения будет величина вещественного типа, поэтому особое внимание следует обращать на тип той переменной, которой он будет присвоен. Если в этом случае типы переменной и присваиваемого ей результата арифметического выражения не будут совпадать, например, переменная будет типа Integer, а значение выражения - типа Single или Double, то после выполнения данного оператора значение переменной будет получено путем автоматического округления результата. В языке Visual Basic предусмотрена возможность преобразования переменных из одного типа в другой при помощи специальных функций (см. табл. 6.9). Однако при этом следует обращать внимание на значение, которое содержит переменная, - необходимо, чтобы оно соответствовало тому типу, в который переменная будет преобразована. В частности любое числовое значение можно преобразовать в строку, однако обратное действие возможно только в том случае, если содержимым строки является число в основной или экспоненциальной форме. Например: intNunber =15 strNumber = CStr(intNunber) ' Результат; "15" strNumber = "2,5E1" intNunber = Cint(strNunber) ' Результат; 25 Особое внимание следует обратить на то, что в строке, преобразуемой в число и содержащей как целую, так и дробную части, использование в качестве разделителя точки или запятой зависит от настроек в панели управления - раздел Язык и стандарты (см. рис. 6.17). Если для разделения целой и дробной части установлена точка, то в преобразуемой строке можно использовать как точку, так и запятую. С другой стороны, если установлена запятая, то в строке для преобразования в число необходимо использовать только запятую. Применение точки в этом случае приведет на стадии компиляции к ошибке несовпадения типов. Например: strNunber = "2.5E1" intNunber = Cint(strNunber) _ ' Результат; ОШИБКА430 Данная ошибка также появляется тогда, когда значение преобразуемой переменной не соответствует задаваемому типу. Например: strNumber = "х1" intNumber = Cint(strNuinber) ' ^ Результат: ОШИБКАМатематические функции. В языке Visual Basic для решения различных математических задач существуют встроенные функции, зависящие от одного аргумента, которые можно использовать непосредственно при вычислении каких-либо выражений (см. табл. 6.12).431 Аргумент во всех тригонометрических функциях задается в радианах, а не в градусах. При необходимости перевода значения, которое задано в градусах, в радианы, следует использовать формулу: радианы = градусы •Пи /180 при вычислении арктангенса необходимо, чтобы аргумент находился в пределах интервала: (-пи/2; пи/2).432При использовании стандартного датчика случайных чисел генерирует число в интервале [0; I], при этом аргумент х в функции Rnd можно опустить.Логические операторы. Помимо математических, в языке Visual Basic можно также вычислять значения логических выражений, которые будут иметь тип Boolean и могут принять одно из двух значений: True (Истина) или False (Ложь). Прежде всего, переменным логического типа можно присваивать результат любого выражения, значение которого принадлежит этому типу. Например: Листинг 6.2. Работа с логическими значениямиDim х, у, blnА х = 5 у = 2blnА = х > у ' Результат: TrueblnА = х Также можно использовать реализованные в данном языке логические функции одной и двух переменных, которые возвращают True или False в зависимости от значений параметров (см. табл. 6.13). В качестве функции одной переменной в Visual Basic выступает логическое отрицание (оператор Not), результатом выполнения которого является значение True, если параметр был равен False, и наоборот, результат равен False, если параметр содержал значение True.433 Описание логических операторов, реализующих данные функции, выглядит следующим образом: And. Действие "конъюнкция" (логическое "и"). Or. Действие "дизъюнкция" (логическое "или"). Хоr. Действие "двоичное сложение". Imp. Действие "импликация". Eqv. Действие "эквивалентность". Ниже приведен пример применения всех описанных выше операторов.Листинг 6.3. Иллюстрация использования логических функцийDim х, у, z, blnА х = 1у = 2z = 3'Оператор AndblnА = х > у And у > z ' Результат: False 'Оператор NotblnА = Not(x blnА =xz ' Результат: True 'Оператор ХоrblnА = х blnА = х > у Imp у > z ' Результат: True 'Оператор EqvblnА = х ^ Конструкции управления Зачастую в определенном месте программы необходимо выполнять те или иные операторы, в зависимости от некоторых условий. Эта возможность в Visual Basic реализуется при помощи так называемых управляющих конструкций (или структур), которые в свою очередь состоят из структур принятия решений и циклов. Ниже приводится подробное описание двух существующих конструкций принятия решений.Конструкция If ...Then. Существует несколько разновидностей данной структуры. Если при выполнении какого-либо усло-434 вия необходимо выполнять один оператор, то нужно использовать конструкцию следующего вида:^ If условие Then оператор В том случае, когда результатом проверки условия является значение True (Истина), то выполняется оператор, находящийся после служебного слова Then. С другой стороны, если после проверки условия было получено значение False (Ложь), то выполнится следующий по порядку оператор. Все описанные параметры данной структуры должны быть указаны в одной строке. Если при выполнении условия требуется выполнил, не один, а несколько операторов, то следует использовать такую конструкцию:^ If условие Then Операторы End If В случае истинности проверяемого условия будут выполнены операторы, расположенные после ключевого слова Then. С другой стороны, если условие является ложным, то выполняется следующий после данной конструкции оператор. В том случае, когда в блоке операторы находится только один оператор, то данная структура все равно должна заканчиваться служебным словосочетанием End If. При необходимости выполнения того или иного оператора (или блока операторов), в зависимости от результата проверки определенного условия, в языке Visual Basic следует использовать следующую конструкцию:^ If условие Thenоператоры1 Elseоператоры2End IfилиIf условие Then операторы1 Else: операторы2End If435 Если результатом проверки условия является значение True, то будет выполнен блок операторы1, находящийся после ключевого слова Then. С другой стороны, если проверка условия дала результат False, то будет выполнен блок операторы2, расположенный после служебного слова Else. Во втором из приведенных вариантов в качестве блока операторы2 может использоваться как один оператор (тогда он записывается после знака «:» в той же строке, что и служебное слово Else), так и несколько (при этом каждый оператор, начиная со второго, записывается в отдельной строке). В том случае, когда определенное действие (или набор действий) нужно выполнять после проверки не одного, а нескольких условий, на языке Visual Basic следует использовать такую управляющую структуру:^ If условие1 Thenоператоры1 Elself условие2 Thenоператоры2 [Else onepaтopы N] End If Если условие1, находящееся после ключевого слова If истинно, то выполняется блок операторы1, расположенный после Then. Если же оно ложно, то осуществляется проверка условия2, находящег