Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика часть 1.doc
Скачиваний:
6
Добавлен:
16.04.2019
Размер:
290.3 Кб
Скачать

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

Для записи макросов, как и для других команд, в Microsoft Word используется язык Visual Basic for Applications (VBA, Visual Basic для приложений). Макрос представляет собой набор команд и операторов на VBA. Каждая команда и действие в Microsoft Word представлены в виде строк формата VBA, процесс записи макроса тоже представляет собой формирование таких строк.

Таким образом, пользователь имеет возможность изменить или создать макрос без повторного выполнения всей процедуры. Хотя макрос VBA можно создать в любом текстовом редакторе, не стоит пренебрегать возможностью записи макроса в Word. Макросу, созданному при помощи Microsoft Word, можно добавлять новые команды и функции, а также на таких макросах можно изучать язык VBA.

Создание макросов в редакторе Visual Basic

Для ввода команд, т.е. создания макроса необходимо открыть специальное окно - редактор программ на VBA в меню Сервис - Макрос - Редактор Visual Basic .

Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы.Программные модули бывают нескольких типов для разных ситуаций:

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

Модуль Эта книга - виден в левом верхнем углу редактора Visual Basic в окне, которое называется Project Explorer. В этот модуль обычно записываются макросы, которые должны выполнятся при наступлении каких-либо событий в книге (открытие или сохранение книги, печать файла и т. п.)

Модуль листа - доступен через контекстное меню листа, команда Исходный текст (View Source). Сюда записывают макросы, которые должны выполняться при наступлении определенных событий на листе (персчет или изменение листа, копирование или удаление листа и т. д.)

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

-Любой макрос должен заканчиваться оператором End Sub.

-Все, что находится между Sub и End Sub - тело макроса, т.е. команды, которые будут выполняться при запуске макроса.

2.

Макросы можно редактировать, используя специальную утилиту, которая входит в поставку Microsoft Office, — редактор Visual Basic (рис. 9.10).

Данная программа содержит возможности, которые позволяют работать с макросом: тестировать, отлаживать, запускать на выполнение. Используя этот редактор, можно добавлять, изменять и удалять объекты в макросах, создавать пользовательские диалоговые окна, отлаживать код программных процедур, просматривать и выбирать компоненты текущих проектов и библиотек, определять вид и поведение объектов макроса во время выполнения и выполнять многое другое

Всего в редакторе Visual Basic предусмотрены 9 окон:

Project Explorer — окно проводника проекта. По умолчанию оно открыто и находится в левой части окна редактора Visual Basic. В нем можно просмотреть компоненты проекта и выполнить с ними множество операций. Подробнее о возможностях работы в этом окне — в следующем разделе этой главы;

UserForm — окно формы. Появляется тогда, когда вы редактируете пользовательскую форму из окна дизайнера формы. Подробнее про пользовательские формы и работу с ними — в главе 5 этой книги.

Toolbox — панель инструментов управления. Из него можно добавить элементы управления в форму или в документ. Появляется вместе с окном дизайнера форм и рассматривается в той же главе для формы.

Properties — одно из самых важных окон. Через него можно просмотреть свойства элемента управления или компонента проекта и их изменить. Он нем — в этой главе.

Code — окно программного кода. В этом окне выполняется основная работа по написанию кода макроса. При открытии программного модуля открывается автоматически. Приемы работы с этим окном будут рассмотрены в этой главе.

Object Browser — обозреватель объектов. Необходим для получения информации о классах, доступных программе. Подробная информация — в главе 4 этой книги, которая посвящена работе с объектами.

Watch — окно контролируемых выражений. Используется во время отладки для отслеживания значений выбранных переменных программы и выражений. Работа в этом окне, так же, как работа с окном Locals и Immediate, будет рассмотрена в главе 6, в которой рассказывается про перехват ошибок и отладку.

Locals — окно локальных переменных. Нужно для отслеживания во время отладки значений переменных текущей процедуры.

Immediate — возможность опять-таки при отладке выполнить отдельные строки программного кода и немедленно получить результат.

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

3.После того как макрос записан, полученную VBA-программу можно отредактировать. Для этого надо:

¦выбрать команду Сервис + Макрос + Макросы или нажать <alt+f8>, чтобы открыть диалоговое окно Макрос;

¦выбрать нужный макрос из списка ниже поля Имя. Макрос, который был записан, не выбирается автоматически, поэтому, чтобы найти его, иногда придется полистать список;

¦щелкнуть на кнопке Изменить. Открывается окно редактора Visual Basic с помещенным в него программным кодом, готовым для редактирования

Обычно макрос содержит следующие элементы.

Ключевое слово Sub. Этим обозначается начало макроса. Из-за ключевого слова Sub (от анг subroutine - подпрограмма) командные макросы также называются процедурами-подпрограммами.

Имя макроса. После ключевого слова Sub Excel добавляет имя макроса, за которым следует открывающаяся и закрывающаяся скобки.

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

Макрооператоры. Основное тело макроса (другими словами, строки между ключевыми словами Sub и End Sub, исключая комментарии в начале макроса) состоит из последовательности операторов. Они являются интерпретацией действий, которые вы выполнили во время записи макроса.

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

Часто нужно добавить новые действия в записанный макрос. К сожалению, VBA не предоставляет никаких возможностей записи новых операторов в существующий макрос. Вместо этого, нужно сначала записать новый макрос, содержащий необходимые команды, и отобразить его код на экране. Затем можно использовать стандартные средства Windows копирования и вставки (можно просто перетащить текст из одного окна в другое), чтобы перенести необходимые операторы из нового макроса с исходный.

4. Тип Date

VBA использует тип Date для хранения дат и времени.

При работе с этим типом данных следует иметь ввиду, что VBA-типы Date не являются такими же типами, как в рабочих листах Excel, хотя во многом и схожи с ними. Например, базовой датой для VBA-типа Date является 30 декабря 1899 года, а в Excel - 1 января 1900 года.

VBA-тип Date является типом последовательных дат. VBA использует отрицательные числа для представления дат ранее базовой даты (30 декабря 1899), и положительные - для дат после базовой. Число 0 представляет саму дату 30.12.1899.

В значении последовательной даты целая часть - это общее число дней от базовой даты. Дробная часть (цифра справа от десятичного знака) - эти цифры обозначают время дня как часть дня. Один час - это 1/24 дня, одна минута - 1/1440 дня, секунда - 1/86400 дня.

Можно вычитать одну дату из другой, добавлять к дате или вычитать числа для изменения ее значения. В VBA имеется несколько встроенных процедур для отдельного извлечения года, месяца, дня, часов, минут и секунд переменной типа Date.

Числа

VBA имеет шесть различных численных типов данных: Byte, Integer, Long, Single, Double, Currency.

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

Целые числа

Integer - это целое число без дробной части (целые числа никогда не содержат десятичного знака, даже если десятичная часть равна нулю).

VBA предоставляет три типа целых данных: Byte, Integer, Long.

Byte - наименьший из трех типов целых данных, предназначен для хранения числе от 0 до 255. Этот тип обычно используют для хранения двоичных данных.

Integer использует диапазон целых чисел от -32768 до 32767.

Long использует диапазон целых чисел от -2147483648 до 2147483647.

Byte, Integer, Long типы требуют меньше памяти для хранения чисел, чем другие численные типы данных VBA, а математические операции и операции сравнения над числами указанных типов быстрее, чем эти же операции для численных типов данных с плавающей точкой.

VBA автоматически преобразует данные типов Byte, Integer, Long в текст, когда они выводятся на экран, используя такие процедуры, как MsgBox.

Числа с плавающей точкой

Числа с плавающей точкой могут иметь любое число цифр до или после десятичной точки (в пределах границ конкретного типа данных). Иногда их называют действительными числами. Этот тип данных используют тогда, когда требуется хранить числа, имеющие дробную часть.

VBA имеет два типа данных с плавающей точкой: Single, Double.

Single используется для хранения: отрицательных чисел от -3,402823*1038 до -1,401298*10-45 и положительных от 1,401298*10-45 до 3,402823*1038. Числа, хранимые с использованием типа Single, называются числами одинарной точности.

Double используется для хранения: отрицательных чисел от -1,79769313486232*10308 до -4,94065645841247*10-324 и положительных от 4,94065645841247*10-324 до 1,79769313486232*10308. Числа, хранимые с использованием типа Double, называются числами двойной точности.

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

В экспоненциальном представлении значения записываются без начальных и конечных нулей, и слева от десятичного знака имеется только одна цифра. Число умножается на 10 в некоторой степени, чтобы показать, где на самом деле находится десятичный знак. Следует помнить, что отрицательная степень приводит в результате к меньшему числу, а положительная - к большему. Вместо надстрочного символа показателя степени используется буква Е: 4.1Е3=4100 2.01Е-2=0.0201

Тип данных Currency

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

Currency хранит числа в диапазоне от -922337203685477,5808 до 922337203685477,5807.

Текстовые строки

Любые текстовые данные, сохраняемые в VBA, называются строками. Для их хранения предназначен тип данных String.

Строка может содержать текстовые символы любых типов: буквы, цифры, знаки пунктуации, разделительные символы и пр.

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

Существует две категории строк: строки переменной длины и строки фиксированной длины. По умолчанию в VBA все строки переменной длины.

Следует сказать, что тип данных String является очень важным типом, т.к., как правило, информация, вводимая пользователем - это строковые данные. Кроме того, поскольку на экране монитора отображается только текст, то все другие типы данных должны быть преобразованы в строковые данные перед выводом на экран.

Логические значения

VBA-программа принимает то или иное "решение", основываясь на различных условиях. Любое условие может принимать два значения: True (Истина) или False (Ложь). Логические значения True и False называются булевскими значениями, а тип данных - Boolean.

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

Тип данных Variant

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

Данные типа Variant принимают характеристики определенного типа, который они сохраняют в данный момент. Например, если данные типа Variant содержат строковые данные, Variant принимает характеристики типа String. VBA использует для данных типа Variant наиболее компактное представление, возможное для конкретных значений, находящихся в данных.

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

5.В Visual Basic переменные хранят информацию (значения). При их использовании Visual Basic резервирует область в памяти компьютера для хранения данной информации. Имена переменных могут достигать 255 символов в длину, начинаются они с буквы, за которой могут следовать другие буквы, цифры или символы подчеркивания. Регистр символов и наименований переменной значения не имеет. Следующая таблица перечисляет некоторые возможные имена переменных и объясняет, подходят ли они по стандарту.

Base1_Ball

Подходит

1Base_Ball

Не подходит, так как начинается не с буквы.

Base.1

Не подходит, так как используется точка.

Base&1

Не подходит, так как используется амперсанд.

ThisIsLongButOK

Не подходит, так как длина всего 15 символов.

Все символы в имени переменной являются значимыми, но их регистр не имеет значения. BASE обозначает ту же переменную, что и base. С другой стороны, Base отличается от Base 1, и оба они - от Base_ I. Однако Visual Basic всегда изменяет первую букву переменной на заглавную при ее определении. Использование осмысленных имен помогает документировать текст программы и облегчает неизбежный процесс ее отладки. Выразительное имя переменной является прекрасным способом для объяснения смысла применения многих инструкций в коде программы. В качестве имен новых переменных нельзя использовать зарезервированные слова; например. Print не подходит для этого. Однако такие слова могут присутствовать как часть имени переменной, например, Printlt. Visual Basic будет выдавать сообщение об ошибке, если программист попытается использовать зарезервированное слово в качестве названия своей переменной, причем обычно сразу после нажатия клавиши ENTER. Одно из наиболее общих соглашений об именах переменных состоит в использовании заглавных букв в начале каждого из слов, составляющих данное имя (например, Printlt, а не Printit). Это соглашение носит название "имена переменных со смешанным регистром". Оно используется и в данной книге, поскольку большинство людей находят такие имена переменных более читабельными. Некоторые еще используют и символ подчеркивания (например, Print_It), но здесь данный стиль не используется, поскольку отнимает много места и иногда вызывает проблемы при отладке.

Описание переменных

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

В следующем примере создается переменная strName и задается тип данных String.

Dim strName As String

Когда эта инструкция располагается в процедуре, переменная strName может использоваться только в данной процедуре. Если же такая инструкция находится в разделе описаний модуля, то переменная strName доступна для всех процедур данного модуля, но не может использоваться процедурами из других модулей проекта. Чтобы сделать переменную доступной для всех процедур проекта, перед ней надо поставить инструкцию Public, как показано в следующем примере:

Public strName As String

Дополнительные сведения о присвоения имен переменным содержатся в разделе справочника Visual Basic "Правила присвоения имен в языке Visual Basic".

Переменные могут описываться как один из следующих типов данных: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (для строк переменной длины), String * длина (для строк фиксированной длины), Object, или Variant. Если тип данных не задан, по умолчанию переменная приобретает тип Variant. Имеется также возможность создать определяемый пользователем тип данных с помощью инструкции Type. Дополнительная информация о типах данных содержится в разделе справочника Visual Basic "Типы данных".

Допускается также описание нескольких переменных в одной строке. В этом случае, чтобы задать тип данных, надо указать определенный тип для каждой переменной. В следующем примере переменные intX, intY, и intZ описываются как Integer.

Dim intX As Integer, intY As Integer, intZ As Integer

В следующей строке intX и intY описываются как Variant; и только intZ описывается как Integer.

Dim intX, intY, intZ As Integer

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

Инструкция Public

Инструкция Public используется для описания общих переменных на уровне модуля.

Public strName As String

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

Инструкция Private

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

Private MyName As String

Личные переменные доступны только для процедур одного и того же модуля.

Примечание. На уровне модуля инструкция Dim эквивалентна инструкции Private. Использование инструкции Private может упростить чтение и отладку программы.

Инструкция Static

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

Инструкция Option Explicit

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

Если неявные описания нежелательны, инструкция Option Explicit должна предшествовать в модуле всем процедурам. Эта инструкция налагает требование явного описания всех переменных этого модуля. Если модуль содержит инструкцию Option Explicit, при попытке использования неописанного или неверно введенного имени переменной возникает ошибка во время компиляции.

В программной среде Visual Basic имеется возможность установить параметр, автоматически включающий инструкцию Option Explicit во все новые модули. В документации приложения содержатся справочные сведения по изменению параметров среды Visual Basic. Следует отметить, что этот параметр не изменяет текст программы пользователя.

6. Константа — это фиксированное значение, которое не может быть изменено программой. Константа может относиться к любому базовому типу. Способ представления константы определяется ее типом. Константы также называются литералами.

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

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

  • Встроенные, или определенные системой константы обеспечиваются приложениями и элементами управления. Константы Visual Basic перечислены в Visual Basic (VB), Visual Basic для приложе-ний (VBA) и библиотеках объектов доступа к данным (DAO) в браузере объектов. Другие приложения, которые обеспечивают библиотеки объектов, типа Microsoft Excel и Microsoft Project, также обеспечивают список констант, которые Вы можете использовать с их объектами, методами, и свойствами. Константы также определены в библиотеке объектных модулей для каждого элемента управления ActiveX.

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

В Visual Basic имена констант находятся в формате смешанного регистра с префиксом, указы-вающим библиотеку объектных модулей, которая определяет константу. Константы из библиотек объектов Visual Basic и Visual Basic для приложений предварены "vb" - например, vbTileHorizontal. Константы из библиотеки объектов доступа к данным предварены "db" - например, dbRelationUnique.

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

Чтобы с уверенностью избежать постоянных столкновений имен, можете квалифицировать ссылки на константы со следующим синтаксисом:

[libname.][modulename.]constname

Libname - обычно имя класса элемента управления или библиотеки. Modulename - имя модуля, который определяет константу. Constname - имя константы. Каждый из этих элементов определен в библиотеке объектов, и его можно найти в браузере объектов.

Создание собственных констант

Синтаксис для объявления константы:

[Public|Private] Const constantname[As type] = expression

Аргумент constantname - действующее символическое имя (правила те же самые, как и для создания имен переменных), а expression составляется из числовых или строковых констант и операторов; однако вы не можете использовать функцию, которая вызывает expression.

Инструкция Const может представлять математический параметр или параметр даты\времени:

Const conPi = 3.14159265358979 Public Const conMaxPlanets As Integer = 9 Const conReleaseDate = #1/1/95#

Инструкцию Const можно также использовать, чтобы определить строковые константы:

Public Const conVersion = "07.10.A" Const conCodeName = "Enigma"

Можно разместить несколько описаний констант на одной строке, если вы отделяете их запятыми:

Public Const conPi = 3.14, conMaxPlanets = 9, conWorldPop = 6E+09

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

Const conPi2 = conPi * 2

Как только вы определили константы, можно размещать их в код, чтобы сделать его более читаемым. Например:

Static SolarSystem(1 To conMaxPlanets) If numPeople > conWorldPop Then Exit Sub

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

Инструкция Const имеет область действия, подобно объявлению переменной, и использует те же правила:

  • Чтобы создать константу, которая существует только в процедуре, объявите ее в пределах этой процедуры.

  • Чтобы создать константу, доступную всем процедурам в модуле, но не к любому коду вне этого модуля, объявите ее в секции модуля Declarations.

  • Чтобы создать константу, доступную во всем приложении, объявите ее в секции стандартного модуля Declarations и поместите перед Const ключевое слово Public. Общие константы не могут быть объявлены в модуле класса или форме.

7. Выражения в Visual Basic

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

Все выражения имеют результатом одно значение определенного типа данных. Выражения могут также иметь результатом одно из специальных значений Empty (неинициализированную переменную типа Variant или результат выражения, содержащий неинициализированную переменную типа Variant) или Null (Null представляет выражение, содержащее неверные данные). Когда вы используете какой-либо знак в выражении, элементы данных (переменные или константы), над которыми производится действие, называются операндами (operands); большинству операций требуется два операнда.

Совместимость типов данных. Автоматическое преобразование данных

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

Многие типы данных совместимы друг с другом. Например, вы можете объединять различные численные типы данных в одном и том же выражении; VBA автоматически выполняет необходимые преобразования типа различных численных типов. VBA может также иногда автоматически преобразовывать другие типы данных так, чтобы все типы в выражении были совместимы, хотя это не всегда возможно. Очень важно контролировать и знать тип выражения, потому что если выражения содержат несовместимые типы, VBA выдает ошибку времени исполнения — ошибку несовпадения типов (type-mismatch). При обработке выражения, содержащего различные типы данных VBA сначала «пытается» устранить любое различие типов, преобразуя значения в выражении в совместимые типы данных. Если устранить какие-либо различия преобразованием типов не удается, отображается ошибка времени исполнения и процедура прекращает выполняться. Например, в выражении 25 & "Информатика" VBA всегда выполняет строковую конкатенацию (соединяет две строки), независимо от типов переменных; результатом является тип String; это выражение никогда не вызывает ошибки несовпадения типов.

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

При преобразовании числа в строку VBA создает строку, содержащую все цифры этого числа и десятичный знак (если число имеет его). Число 3413.72 (точка используется для записи числа в коде), например, преобразуется в строку "3413,72". Если число очень большое или очень маленькое, VBA может создать строковое представление числа в экспоненциальной записи; например, число 0.0000000004927 преобразуется в строку "4,927Е—11".

VBA может преобразовывать строку в число, если только эта строка содержит символьное представление числа в десятичном формате или экспоненциальном. Строки "988,6", "812", "-186,7", "1,ЗЕ10" представляют числа, и VBA может преобразовать их в числа. Строки "1.045", "$74.550" и "С добрым утром!" не могут быть преобразованы в числа.

Когда VBA преобразует значения типа Boolean в числа, значение True преобразуется в 1, а значение False — в 0. Когда VBA преобразует число в тип Boolean, нуль преобразуется в False, а любое другое значение преобразуется в True. Когда VBA преобразует значения типа Boolean в строки, VBA использует строку "True" для True и "False" — для False.

Когда VBA преобразует тип данных Date в число, результатом является численное значение — число типа Double, которое содержит количество дней от 30 декабря 1899 (отрицательное число представляет дату, более раннюю, чем 12/30/1899). Десятичная часть числа (если имеется) выражает время дня как часть дня; 0 - это полночь, а 0.5 - это полдень. В VBA преобразование численных типов данных в типы Date является просто обратным преобразованию типа Date в число.

Арифметические операции

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

Таблица 11 - Знаки операций (обозначения), используемые в арифметических VBA-выражениях (Ni - это любое допустимое численное выражение VBA)

Знак

+

*

/

\

Mod

Синтаксис

Имя/Описание

N1 + N2

Сложение. Прибавляет N1 к N2

N1 — N2

Вычитание. Вычитает N2 из N1

N1 * N2

Умножение. Умножает N1 на N2

N1 / N2

Деление. Делит N1 на N2.

Nl \ N2

Целочисленное деление. Делит N1 на N2, отбрасывая любую дробную часть так, чтобы результат был целым числом.

N1 Mod N2

Деление по модулю. Делит N1 на N2, возвращая только остаток операции деления.

^

N1 ^ N2

Возведение в степень. Возводит N1 в степень N2.

Оба операнда должны быть численными выражениями или строками, которые VBA может преобразовать в число

8.

9.Логические операторы VBA

HYPERLINK \l ""Операторы сравнения предназначены для проверки равенства или неравенства сравниваемых операндов. Все они возвращают true в случае установления истинности выражения и false в противном случае

Оператор Синтаксис Описание

AND A AND B Конъюнкция: Если А и В имеют значение True, то - True. Иначе - False

OR A OR B Дизъюнкция: Если любой из операндов имеет значение True, то - True. Иначе - False

NOT NOT A Отрицание: Если А имеет значение False, то - True. Иначе - False

XOR A XOR B Исключение: Если А имеет значение True или В имеет значение True, то - True. Иначе - False

EQV A EQV B Эквивалентность: Если А имеет такое же значение что и В, то - True. Иначе - False

IMP A IMP B Импликация: Если А имеет значение True и В имеет значение False, то - False. Иначе - True

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

Результатом логической операции является значение типа Boolean (или Null, если хотя бы один из операндов имеет значение Null).

Логический оператор AND

Синтаксис:

Операнд_1 AND Операнд_2

Оператор AND выполняет логическую конъюнкцию.

Результатом данной операции является значение True, только когда оба операнда имеют значение True, иначе - False.

Таблица истинности

Операнд_1 Операнд_2 Результат

True True True

True False False

False True False

False False False

Оператор AND можно использовать для нескольких операндов:

(5<7) AND (4>3) AND (5=6) результатом будет False

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

Логический оператор OR

Синтаксис:

Операнд_1 OR Операнд_2

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

Результатом данной операции является значение True, если хотя бы один из операндов имеет значение True, иначе - False.

Таблица истинности

Операнд_1 Операнд_2 Результат

True True True

True False True

False True True

False False False

Оператор OR можно использовать для нескольких операндов:

(5<7) OR (4>3) OR (5=6) результатом будет True

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

Операторы AND и OR можно комбинировать:

((5<7) AND (4>3)) OR (5=6) результатом будет True

Логический оператор NOT

Синтаксис:

NOT Операнд

Оператор NOT выполняет логическое отрицание.

Оператор NOT использует только один операнд.

Таблица истинности

Операнд Результат

True False

False True

Операторы AND OR NOT можно комбинировать:

((5<7) AND (4>3)) OR NOT (5=6) результатом будет True

Логический оператор XOR

Синтаксис:

Операнд_1 XOR Операнд_2

Оператор XOR выполняет логическое исключение.

Результатом данной операции является значение True, если операнды имеют разные значения, иначе - False.

Таблица истинности

Операнд_1 Операнд_2 Результат

True True False

True False True

False True True

False False False

((5<7) AND (4>3)) OR NOT (5=6) XOR (5=5) результатом будет False

Логический оператор EQV

Синтаксис:

Операнд_1 EQV Операнд_2

Оператор EQV - это оператор логической эквивалентности.

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

Таблица истинности

Операнд_1 Операнд_2 Результат

True True True

True False False

False True False

False False True

((5<7) AND (4>3)) OR NOT (5=6) EQV (5=5) результатом будет True

Логический оператор IMP

Синтаксис:

Операнд_1 IMP Операнд_2

Оператор IMP выполняет логическую операцию импликации.

Таблица истинности

Операнд_1 Операнд_2 Результат

True True True

True False False

False True True

False False True

((5<7) AND (4>3)) OR NOT (5=6) IMP (5=5) результатом будет True

Логический оператор IMP наименее интуитивно понятный из всех логических операторов. К счастью, необходимость в его применении возникает довольно редко

10.Функция - это встроенная формула, выполняющая действия над выражениями и генерирующая какое-то значение, которое VBA вставляет в программу в том месте, где появляется имя этой функции.

Не следует путать термины функция и процедура. Процедура, как правило, выполняет какую-то определенную задачу (задачи). Функция оперирует определенными данными и всегда возвращает некоторое результирующее значение.

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

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

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

function Имя_функции (параметр1, параметр2, ... параметрN){ Блок_действий return "значение возвращаемое функцией"; }

Если прямо так написать в php-программе, то работать ничего не будет. Во-первых, Имя_функции и имена параметров функции (параметр1, параметр2и т.д.) должны соответствовать правилам наименования в PHP (и русских символов в них лучше не использовать). Имена функций нечувствительны к регистру. Во-вторых, параметры функции –это переменные языка, поэтому перед названием каждого из них должен стоять знак $. Никаких многоточий ставить в списке параметров нельзя. В-третьих, вместо слов блок_действий в теле функции должен находиться любой правильный PHP-код (не обязательно зависящий от параметров). И наконец, после ключевого слова returnдолжно идти корректное php-выражение (что-либо, что имеет значение).Кроме того, у функции может и не быть параметров, как и возвращаемого значения.

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

Аргументы функций

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

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

Когда аргумент передается в функцию по значению, изменение значения аргумента внутри функции не влияет на его значение вне функции. Чтобы позволить функции изменять ее аргументы, их нужно передавать по ссылке. Для этого в определении функции перед именем аргумента следует написать знак амперсанд «&».

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

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

Возвращаемые значения

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

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

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

11.Функция(аргумент) Действие

Abs(N) Возвращает абсолютное значение аргумента N

Atn(N) Возвращает арктангенс N (радиан)

Cos(N) Возвращает косинус N (радиан)

Exp(N) Возвращает константу е (натуральный логарифм = 2.718282...), возведенную в степень N Fix(N) Возвращает целую часть N. Не округляет число, а отбрасывает любую дробную часть. Если N отрицательное число, то возвращается ближайшее отрицательное целое большее, чем или равное N

Int(N) Возвращает целую часть N. Не округляет число, а отбрасывает любую дробную часть. Если N отрицательное число, то возвращается ближайшее отрицательное целое меньшее, чем или равное N

Log(N) Возвращает натуральный логарифм N

Rnd(N) Возвращает случайное число: аргумент является необязательным. Используется только после инициализации генератора случайных чисел (оператор Randomize)

Sgn(N) Возвращает знак числа: -1, если N - отрицательное; 1, если N - положительное; 0, если N равно 0

Sin(N) Возвращает синус N (радиан)

Sqr(N) Возвращает корень квадратный из N. Если N является отрицательным числом - возвращается ошибка времени исполнения

Tan(N) Возвращает тангенс N (радиан

12.Функции преобразования данных

N - любое численное значение; S - любое строковое значение; E - выражение любого типа. Аргументы каждой функции являются обязательными, если не указано иначе.

Функция(аргумент)

Действие

Asc(S)

Возвращает число кода символа, соответствующее первой букве строки S

Chr(N)

Возвращает строку из одного символа, соответствующего коду символа N, который должен быть числом между 0 и 255 (обратна предыдущей)

Format(E,S)

Возвращает строку, содержащую значение, представленное выражением Е, в формате в соответствии с инструкциями, содержащимся в S

Hex(N)

Возвращает строку, содержащую шестнадцатиричное представление N

Oct(N)

Возвращает строку, содержащую восьмиричное представление N

RGB(N,N,N)

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

Str(N)

Возвращает строку, эквивалентную численному выражению N

Val(S)

Возвращает численное значение, соответствующее числу, представленному строкой S, которая должна содержать только цифры и одну десятичную точку, иначе возвращается 0

CBool(N)

Возвращает Boolean-эквивалент численного выражения N

CByte(E)

Возвращает численное значение типа Byte (от 0 до 255). Е - любое допустимое численное или строковое выражение, которое может быть преобразовано в число

CCur(E)

Возвращает численное значение типа Currency. Е - любое допустимое численное или строковое выражение, которое может быть преобразовано в число

CDate(E)

Возвращает значение типа Date. E может быть любым допустимым выражением (строкой или числом), представляющим дату в диапазоне 1/1/100 - 12/31/9999

CDbl(E)

Возвращает численное значение типа Double. Е - любое допустимое численное или строковое выражение, которое может быть преобразовано в число

CInt(E)

Возвращает численное значение типа Integer. Е - любое допустимое численное или строковое выражение, которое может быть преобразовано в число

CLng(E)

Возвращает численное значение типа Long. Е - любое допустимое численное или строковое выражение, которое может быть преобразовано в число

CSng(E)

Возвращает численное значение типа Single. Е - любое допустимое численное или строковое выражение, которое может быть преобразовано в число

CStr(E)

Возвращает численное значение типа String. Е - любое допустимое численное или строковое выражение, которое может быть преобразовано в число

CVar(E)

Возвращает численное значение типа Variant. Е - любое допустимое численное или строковое выражение, которое может быть преобразовано в число

13.функции даты и времени

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

Функция(аргумент)

Действие

Date

Возвращает системную дату

Time

Возвращает системное время

Now

Возвращает системные дату и время

Year(D)

Возвращает целое, являющееся частью выражения типа Date и содержащее год. Год возвращается как число между 100 и 9999

Month(D)

Возвращает целое, являющееся частью выражения типа Date и содержащее месяц. Месяц возвращается как число между 1 и 12

Day(D)

Возвращает целое, являющееся частью выражения типа Date и содержащее день. День возвращается как число между 1 и 31

Weekday(D)

Возвращает целое, являющееся частью выражения типа Date и содержащее день недели. День недели возвращается как число между 1 и 7 (1 - воскресенье..)

Hour(D)

Возвращает целое, содержащее часы как часть времени, содержащегося в выражении типа Date. Часы возвращаются как число между 0 и 23. Если аргумент не содержит значения времени, то возвращается 0

Minute(D)

Возвращает целое, содержащее минуты как часть времени, содержащегося в выражении типа Date. Минуты возвращаются как число между 0 и 59. Если аргумент не содержит значения времени, то возвращается 0

Second(D)

Возвращает целое, содержащее секунды как часть времени, содержащегося в выражении типа Date. Секунды возвращаются как число между 0 и 59. Если аргумент не содержит значения времени, то возвращается 0

DateSerial(N,N,N)

Возвращает значение последовательной даты для заданной даты. Слева направо аргументы представляют год (целое число от 100 до 9999), месяц (от 1 до 12) и день (от 1 до 31)

TimeSerial(N,N,N)

Возвращает значение последовательного времени. Слева направо аргументы представляют часы (целое число от 0 до 23), минуты (от 0 до 59) и секунды (от 0 до 59)

DateValue(E)

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

TimeValue(E)

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

Timer

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

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

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

Функция(аргумент)

Действие

InStr(N1,S1,S2,N2)

Возвращает положение S2 в S1. N1 - начальное положение для поиска. N2 определяет, следует ли выполнять поиск с учетом регистра. N1, N2 - необязательные аргументы

Lcase(S)

Возвращает строку (тип String), содержащую копию S со всеми символами верхнего регистра, преобразованными в символы нижнего регистра

Left(S,N)

Возвращает строку: копирует N символов из S, начиная с левого крайнего символа S

Len(S)

Возвращает число символов в S, включая начальные и конечные пробелы

Ltrim(S)

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

Mid(S,N1,N2)

Возвращает строку: копирует N2 символов из S, начиная с позиции символа в S, заданной аргументом N1. N2 - необязательный аргумент, если он опущен, то возвращаются все символы в строке S от позиции N1 до конца строки

Right(S,N)

Возвращает значение типа String: копирует N символов из S, начиная с правого крайнего символа S

Rtrim(S)

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

Space(N)

Возвращает строку пробелов длиной N символов

StrComp(S1,S2,N)

Сравнивает S1 с S2 и возвращает число, обозначающее результат сравнения: -1, если S1<S2; 0 - S1=S2; 1 - S1>S2. N является необязательным аргументом и указывает следует ли выполнять сравнение с учетом регистра

StrConv(S,N)

Возвращает строку, преобразованную в новую форму в зависимости от числового кода, заданного аргументом N. VBA предоставляет внутренние константы для использования с функцией StrConv. Наиболее полезными являются: vbProperCase (преобразует строку так, что каждая буква, начинающая слово, становится заглавной), vbLowerCase (преобразует строку в буквы нижнего регистра) и vbUpperCase (преобразует строку в буквы верхнего регистра)

String(N,S)

Возвращает строку длиной N символов, состоящую из символа, заданного первым символом в S

Trim(S)

Возвращает копию строки S после удаления начальных и конечных символов пробела из этой строки

Ucase(S)

Возвращает S со всеми символами нижнего регистра, преобразованными в символы верхнего регистра

15.InputBox

Синтаксис

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

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

Параметры

Наименование

Описание

Prompt

Обязательный. Строковое выражение, отображаемое как сообщение в диалоговом окне. Максимальная длина строки prompt составляет приблизительно 1024 символов и зависит от ширины используемых символов. Строковое значение prompt может содержать нескольких физических строк. Для разделения строк допускается использование символа возврата каретки (Chr(13)), символа перевода строки (Chr(10)) или комбинацию этих символов (Chr(13) & Chr(10)).

Title

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

Default

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

XPos

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

YPos

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

Helpfile

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

Context

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

Замечания

Если указаны оба аргумента, helpfile и context, пользователь имеет возможность нажатием клавиши F1 вызвать контекстную справку. Некоторые главные приложения, например, Microsoft Excel, также автоматически добавляют в диалоговое окно кнопку "Справка". Если пользователь нажимает кнопку "OK" или клавишу ENTER, функция InputBox возвращает содержимое поля ввода. Если пользователь нажимает кнопку "Отмена", функция возвратит пустую строку (""). Функцию InputBox с двумя или большим числом аргументов можно использовать только в выражении. Наличие запятых, соответствующих отсутствующим аргументам, является обязательным

Функция MsgBox предназначена для вывода сообщения, адресованного пользователю, и ожидания реакции пользователя в виде числового кода нажатой кнопки:

K= MsgBox(Msg,Buttons,Caption,HelpFile,Context])

Единственным обязательным параметром функции MsgBox является текст сообщения Msg. Если задан только он, то в диалоговом окне наряду с сообщением Msg появляется только кнопка <OK> Ничего другого, кроме как нажать единственную кнопку, пользователю не остается — крестик и тот не доступен. Числовой код, соответствующий нажимаемой кнопке в данном случае равен 1 (системная константа vbOK).

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

Таблица 6.1

Число

Константа

Пояснение

Комбинации кнопок

0

VbOKOnly

Только кнопка <OK>

1

VbOKCancel

Кнопки <OK> и <Cancel> (Отмена)

2

VbAbortRetryIgnore

Кнопки <Abort> (Стоп), <Retry> (Повтор), <Ignore> (Пропустить)

3

VbYesNoCancel

Кнопки <Yes> (Да), <No> (Нет), <Cancel> (Отмена)

4

VbYesNo

Кнопки <Yes> (Да), <No> (Нет)

5

VbRetryCancel

Кнопки <Retry> (Повтор), <Cancel> (Отмена)

Тип пиктограммы

16

VbCritical

Запрещающий знак в кружочке

32

VbQuestion

Вопросительный знак в кружочке

48

VbExclamation

Восклицательный знак в кружочке

64

VbInformation

Буква i в кружочке

Номер активизируемой кнопки, срабатывающей по умолчанию

0

VbDefaultButton1

Кнопка номер 1

256

VbDefaultButton2

Кнопка номер 2

512

VbDefaultButton3

Кнопка номер 3

768

VbDefaultButton4

Кнопка номер 4 (в ее роли выступает Help)

Числовое значение, возвращаемое функцией MsgBox, определяет кнопку, нажатую пользователем:

1 — OK

2 — Cancel (Отмена)

3 — Abort (Стоп)

4 — Retry (Повтор)

5 — Ignore (Пропустить)

6 — Yes (Да)

7 — No (Нет)