Основы программирования на vba
VBA Excel. Начинаем программировать с нуля
Первое знакомство с редактором VBA Excel, создание процедур (подпрограмм) и написание простейшего кода, работающего с переменными и ячейками рабочего листа.
Знакомство с редактором VBA
- Создайте новую книгу Excel и сохраните ее как книгу с поддержкой макросов с расширением .xlsm. В старых версиях Excel по 2003 год – как обычную книгу с расширением .xls.
- Нажмите сочетание клавиш «левая_клавиша_Alt+F11», которое откроет редактор VBA. С правой клавишей Alt такой фокус не пройдет. Также, в редактор VBA можно перейти по ссылке «Visual Basic» из панели инструментов «Разработчик» на ленте быстрого доступа. Если вкладки «Разработчик» на ленте нет, ее следует добавить в настройках параметров Excel.
В левой части редактора VBA расположен проводник проекта, в котором отображены все открытые книги Excel. Верхней строки, как на изображении, у вас скорее всего не будет, так как это – личная книга макросов. Справа расположен модуль, в который записываются процедуры (подпрограммы) с кодом VBA. На изображении открыт модуль листа, мы же далее создадим стандартный программный модуль.
- Нажмите кнопку «Module» во вкладке «Insert» главного меню. То же подменю откроется при нажатии на вторую кнопку после значка Excel на панели инструментов.
После нажатия кнопки «Module» вы увидите ссылку на него, появившуюся в проводнике слева.
Первая программа на VBA Excel
Добавляем на стандартный модуль шаблон процедуры – строки ее начала и завершения, между которыми мы и будем писать свою первую программу (процедуру, подпрограмму).
- Откройте стандартный модуль двойным кликом по его ссылке в проводнике. Поместите в него курсор и нажмите кнопку «Procedure…» во вкладке «Insert» главного меню. Та же ссылка будет доступна при нажатии на вторую кнопку после значка Excel на панели инструментов.
В результате откроется окно добавления шаблона процедуры (Sub).
- Наберите в поле «Name» имя процедуры: «Primer1», или скопируйте его отсюда и вставьте в поле «Name». Нажмите кнопку «OK», чтобы добавить в модуль первую и последнюю строки процедуры.
Имя процедуры может быть написано как на латинице, так и на кириллице, может содержать цифры и знак подчеркивания. Оно обязательно должно начинаться с буквы и не содержать пробелы, вместо которых следует использовать знак подчеркивания.
- Вставьте внутрь шаблона процедуры следующую строку: MsgBox «Привет» .
Функция MsgBox выводит информационное сообщение с указанным текстом. В нашем примере – это «Привет».
- Проверьте, что курсор находится внутри процедуры, и запустите ее, нажав клавишу «F5». А также, запустить процедуру на выполнение можно, нажав на треугольник (на изображении под пунктом меню «Debug») или на кнопку «Run Sub/UserForm» во вкладке «Run» главного меню редактора VBA Excel.
Если вы увидели такое сообщение, как на изображении, то, поздравляю – вы написали свою первую программу!
Работа с переменными
Чтобы использовать в процедуре переменные, их необходимо объявить с помощью ключевого слова «Dim». Если при объявлении переменных не указать типы данных, они смогут принимать любые доступные в VBA Excel значения. Комментарии в тексте процедур начинаются со знака «’» (апостроф).
Пример 2
Присвоение переменным числовых значений:
Основы среды программирования Microsoft Visual Basic 6.0
В данном материале рассмотрены основы программирования на языке Visual Basic, а конкретней в среде программирования Microsoft Visual Basic 6.0. Данная среда программирования и язык Visual Basic является одним из самых легких языков для начинающих программистов. А почему? В этой статье мы с Вами и попробуем разобраться.
Теория по Visual Basic
Вообще цель программирования — это написание команд для компьютера, которые смогут показать ему, что нужно сделать, например, напечатать отчет, подсчитать что-нибудь или просто развеселить Вас.
С самого начало заведено, что программирование в основном служит для написания команд двух типов. Команды первого типа используются для отображения пользовательского интерфейса, а команды второго типа — для самих действий, например для перемножения или открытия файла.
Для большинства людей изучение программирования доставляет определенные трудности. Первая и основная трудность связана с тем, что языки программирования, например C++ или Assembler, слишком сложны для понимания. Попытка изучить язык Assembler часто сравнима с попыткой человека, владеющего русским или немецким, научиться разговаривать и писать на арабском или японском. Вторая трудность состоит в том, что пока Вы пишите команды для создания пользовательского интерфейса, в конце концов, у Вас не останется сил и времени на написание команд, которые и выполняют конкретные действия.
Чтобы решить обе проблемы, компания Microsoft разработала язык Visual Basic, а точнее среду программирования Microsoft Visual Basic, которая объединила в себе язык программирования BASIC и возможности быстрого создания пользовательского интерфейса простыми способами. В отличие от многих других языков программирования, BASIC был специально разработан для обучения основам программирования начинающих пользователей.
Что касается визуальных возможностей среды Visual Basic, то здесь Вы можете создавать свой пользовательский интерфейс без написания отдельных команд. Иными словами, Вы создаете интерфейс, как будто Вы рисуете себе картинку, без всяких проблем.
Начиная писать любую программу, первым делом необходимо решить, что эта программа должна делать. Когда Вы будете точно знать, что Вы хотите от программы и компьютера, Вы без труда сможете определить, какие команды нужно дать компьютеру, чтобы он в точности выполнил Ваши указания.
Не существует уникального способа написания программы. Теоретически существуют возможность с помощью тысячи способов написать одну и ту же программу. Два программиста могут написать программы, которые будут работать абсолютно одинаково, но при этом они будут состоять из совершенно разных кодов и команд. Поэтому не важно, как написана программа и на каком языке. Важно лишь то, что она работает так, как Вы это запланировали. Visual Basic помогает реализовать идею быстрого создания пользовательского интерфейса простым способом. Пользовательский интерфейс служит двум целям: отображает информацию на экране и принимает от пользователя конкретные команды к действию.
Основы среды программирования
В Visual Basic все элементы интерфейса делятся на две группы: формы и объекты.
Форма — это всего лишь прямоугольное окно, отображаемое на экране. Объекты — представляют собой элементы, которые содержатся в форме и служат для отображения или получения информации от пользователя. Объектом может быть текст, кнопка, флажок, опции и т.д.
После того как Вы создали форму и разместили в ней нужные объекты, эту форму и ее объекты нужно подогнать под конкретную программу. С точки зрения Visual Basic, каждый элемент интерфейса имеет набор собственных свойств, который определяет, как этот объект выглядит и что делает. В частности, свойствами определяются такие атрибуты объекта, как размер, размещение на экране, цвет и т.д.
Разные элементы имеют разные свойства. Каждый раз, когда Вы рисуете форму или объект, Visual Basic назначает им свойства, установленные по умолчанию.
В отличие от таких языков программирования как C++, Visual Basic избавляет Вас от необходимости использовать коды для создания пользовательского интерфейса, но эти команды все же необходимы для того, чтобы Ваша программа заработала. В мире Visual Basic команды (коды) служат двум целям: делают пользовательский интерфейс рабочим, а также обрабатывают различные данные, с тем, чтобы вернуть пользователю полезный результат.
Даже если Вы с помощью Visual Basic создали какой-то интерфейс, он не будет работать до тех пор, пока программист не напишет ему действия, которые объяснят компьютеру, что нужно делать, если пользователь, скажем, щелкнул на кнопке. Каждый раз, когда пользователь двигает курсором, нажимает кнопку или щелкает кнопкой мыши, т.е. выполняет действие, таковое рассматривается компьютером как команда к действию. Когда такое событие происходит, компьютер обращается к командам BASIC, с тем чтобы они объяснили, как на это нужно реагировать.
Слово Basic, в названии Microsoft Visual Basic 6.0., указывает лишь на то, что синтаксис программ и операторы ссылаются на язык высокого уровня Basic (Beginners Atlpurpose Symbolic Instruction Code). Но если Вы знаете обычный Basic, то очень скоро убедитесь, что Visual Basic заметно от него отличается.
Если Вас интересует вопрос что такое Visual Basic — компилятор или интерпретатор, можно смело сказать: «И тем, и другим». Его нельзя на сто процентов отнести ни к компиляторам, ни к интерпретаторам.
Основным признаком интерпретатора Visual Basic является то, что созданные с помощью него программы выполняются только в среде разработки. Программу можно запустить непосредственно из среды и если в ней есть ошибки, они сразу же распознаются. Все это наблюдается и в Visual Basic, где можно запустить приложение непосредственно в среде программирования. При этом Visual Basic использует технологию Threaded-p-Code, при которой каждая написанная строка кода преобразуется в промежуточный код — Threaded-p-Code. Не путайте это не машинный код, но такой код выполняется быстрее, чем при работе с обычным интерпретатором. Во-первых, Visual Basic сразу же проверяет синтаксис программы и выдает сообщение, если присутствует ошибка. Также можно самим искать эти ошибки.
При этом Visual Basic — не просто интерпретатор, так как это означало бы, что приложения выполняются только в среде Visual Basic. Эта среда программирования предоставляет возможность создавать и исполняемые ЕХЕ-файлы, поэтому она относится и к компиляторам.
Visual Basic нельзя назвать чистым компилятором, так как в отличие, например, от Visual C++, Visual Basic не создает исполняемый файл сразу же при запуске из среды разработки. Для создания такого файла необходимо сделать это явно (команда FileMake ***.EXE). Начиная с пятой версии, Visual Basic обладает так называемым «Native Compiler», т.е. компилятором, который может создавать машинный код. Таким образом, Visual Basic объединяет в себе возможности, как интерпретатора, так и компилятора. И это имеет больше преимуществ, чем недостатков.
Теперь давайте поближе познакомимся со средой программирования Microsoft Visual Basic. При открытие самой среды программирования у Вас появляется окно «Новый проект», в котором и нужно выбрать какой проект мы будим создавать, для начала мы создадим простой проект, а точнее стандартный, «Standard EXE» это — стандартное выполняемое приложение. В дальнейшем, когда Вы уже научитесь работать в этой среде можете пробовать создавать и другие проекты, например ActiveX DLL — динамическая библиотека ActiveX.
После того как Вы нажали создать (открыть) новый проект, у Вас появится сама среда программирования Visual Basic, а точнее форма, но пока в ней ничего нет, и она ничего делать не умеет. Для любопытства можете нажать команду меню run->start (запустить) или просто выбрать в быстром меню кнопку «старт», у Вас запустится программа, но как я уже сказал, она ничего не делает, это просто пустая форма. Закройте это окошко и давайте наполним нашу программу пользовательским интерфейсом и программным кодом.
Пример программы на VB
Для начала мы с Вами сделаем простенькую программу.
Поместите на форму следующие объекты: 2 кнопки CommandButton (Кнопка управления) и одно текстовое поле TextBox (Текстовое поле). Они расположены слева и называются «Кнопки панели элементов управления». Теперь когда у Вас они расположены на форме, можете, как угодно их поместить, растянуть, и даже задать какие-нибудь свойства, которые расположены справа. Мы с Вами зададим всего лишь их название, для этого выделите кнопку Command1 (просто нажав на нее) и с права в окне свойств найдите поле Caption и задайте название этой кнопки (измените Command1 например на «Выполнить»). Теперь выделим Command2 и зададим ей название «Выход».
Теперь, когда у нас есть объекты на форме, давайте зададим им действия, которые они должны выполнять. Щелкните 2 раза по кнопки Command1 (или как у нас уже «Выполнить») и у Вас откроется окно кода где написано:
Вы напишите между этими строками вот что, и должно получиться вот так:
Здесь мы задали, что при нажатие этой кнопки в текстовом поле будет появляться эта надпись.
Можете закрыть по крестику окно кода, и щелкнуть 2 раза по кнопке Command2 (у нас «Выход»), появляется то же самое окно, но уже готовое, для того чтобы задать действие для второй кнопки пишем вот что:
Мы здесь написали команду END, которая обозначает, что программа заканчивает свою работу.
Все можете запустить Вашу первую программу и попробовать, как она работает, но это конечно все только начало т.к. на Visual Basic можно написать такие серьезные программы которые не уступят таким программам, которые написаны, например, на языке C++.
Надеюсь, Вы теперь понимаете, почему этот язык является одним из самых легких (если не самым легкий) языков программирования. А начинать с него или не с него, то это только Ваш выбор.
Все, удачи в освоение Visual Basic, начинающим рекомендую начать свой путь программиста именно с этого языка.
ОСНОВЫ ПРОГРАММИРОВАНИЯ НА VBA
Типы данных
Типы данных относятся к самым фундаментальным понятиям любого языка программирования. Тип данных определяет множество допустимых значений, которое может принимать указанная переменная.
В VBA имеются следующие основные типы данных:
Integer (целое число)
От -32 768 до 32 767
Long (длинное целое число)
От -2 1 47 483 648 до 2 1 47 483 647
single (число с плавающей запятой обычной точности)
От -3.402823Е38 до ‑1.401298Е-45 для отрицательных значений;
от 1.401298Е-45 до 3.402823Е38 для положительных значений
Double (число с плавающей запятой двойной точности)
От -1 ,7976931 3486232Е308 до -4.94065645841 247Е-324 для отрицательных значений;
от 4.94065645841 247Е-324 до 1.79769313486232Е308 для положительных значений
От -922 337 203685477.5808 до 922337203685477.5807
Decimal (масштабируемое целое число)
+/-792281 6251 4264337593543950335 с 28 знаками справа от запятой; минимальное ненулевое значение имеет вид
Date (даты и время)
От 1 января 100 г. до 31 декабря 9999 г.
Ob j ect (объект)
Любой указатель объекта
string (строка переменной длины)
10 + длина строки
От 0 до приблизительно 2 миллиардов
string (строка постоянной длины)
От 1 до приблизительно 65 400
Variant (числовые подтипы)
Любое числовое значение вплоть до границ диапазона для типа Double
Variant (строковые подтипы)
22 + длина строки
Как для строки (string) переменной длины
Тип данных, определяемый пользователем (с помощью ключевого слова Туре)
Объем определяется элементами
Диапазон каждого элемента определяется его типом данных
Описание типа каждой переменной делает программу надежнее и, кроме того, убыстряет ее работу, т. к. VBA не требуется тратить время на распознавание типа неописанной переменной при каждом обращении к ней.
Dim [WithEvents] ИмяПеременной[([Индексы])] [As [New] Тип]
[,[WithEvents] ИмяПеременной[([Индексы])] [As [New] Тип]] . . .
Ключевое слово, указывающее, что аргумент имяперемен-ной является именем объектной переменной, которая используется при отклике на события, генерируемые объектом ActiveX (т. е. объектом, который может быть открыт для других приложений и средств программирования)
Имя переменной, удовлетворяющее стандартным правилам именования переменных
Размерности переменной массива; допускается описание до 60 размерностей. Для задания аргумента индексы используется следующий синтаксис:
[Нижний То] Верхний [, [Нижний То] Верхний] .
Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией option Base. Если отсутствует инструкция option Base, нижняя граница массива равняется нулю
Ключевое слово, включающее возможность неявного создания объекта. Если указано ключевое слово New при описании объектной переменной, новый экземпляр объекта создается при первой ссылке на него, поэтому нет необходимости присваивать ссылку на объект с помощью инструкции Set
Тип данных переменной. Для каждой описываемой переменной следует использовать отдельное предложение As Тип
Переменные, описанные с помощью ключевого слова Dim на уровне модуля, доступны для всех процедур в данном модуле. Переменные, описанные на уровне процедуры, доступны только в данной процедуре.
Инструкция Dim предназначена для описания типа данных переменной на уровне модуля или процедуры. Например, следующая инструкция описывает переменную с типом integer.
Dim N As Integer
Инструкция Dim предназначена также для описания объектного типа переменных. Далее приводится описание переменной для нового экземпляра рабочего листа.
Dim X As New Worksheet
Если при описании объектной переменной не используется ключевое слово New, то для использования объекта, на который ссылается переменная, существующий объект должен быть присвоен переменной с помощью инструкции Set.
Если тип данных или тип объекта не задан, и в модуле отсутствует инструкция DefTnn, по умолчанию переменная получает тип variant. Для обязательного описания всех переменных надо поместить в начале модуля инструкцию option Explicit. Использование этой инструкции полезно при отладке программ, т. к. она позволяет легче отслеживать возможную путаницу в именах при наборе программы.
В VBA пользователь определяет имена переменных, функций, процедур, типов, постоянных и других объектов. Вводимые пользователем имена должны отражать суть обозначаемого объекта так, чтобы делать программу легко читаемой. В VBA имеются следующие ограничения на имена:
- Длина имени не должна превышать 255 символов.
- Имя не может содержать точек, пробелов и следующих символов: %, .&,
!, #, @, $. - Имя может содержать любую комбинацию букв, цифр и символов, начинающуюся с буквы.
- Имена должны быть уникальны внутри области, в которой они определены.
- Не следует использовать имена, совпадающие с ключевыми словами VBA и именами встроенных функций и процедур.
Хотя регистр букв (верхний или нижний) в имени не имеет значения, умелое использование его может существенно облегчить понимание содержательной стороны переменной. Например, вместо плоских и невыразительных имен
предпочтительнее использовать следующие имена, которые легче воспринимаются, благодаря выделению некоторых символов, входящих в них, разумным использованием верхнего регистра
Инструкция DefTиn (вместо тип в имени инструкции фигурируют буквы, обозначающие конкретный тип данных) используется на уровне модуля для задания типа данных по умолчанию для переменных, аргументов, передаваемых в процедуры, и значений, возвращаемых процедурами Function и Property Get, имена которых начинаются с соответствующих символов.
Основы программирования VBA и создание макросов в приложениях Mіcrosoft Offіce
Курс дистанционного обучения:
«Экономическая информатика»
Модуль 2 (2,5 кредита): Прикладное программное обеспечение офисного назначения
Тема 2.1. Обработка текстовой информации
Тема 2.2. Процессоры электронных таблиц
Тема 2.3. Программные средства презентаций и основы офисного программирования
Тема 2.4. Системы управления базами данных и экспертные системы
2.4.11. Учебная база данных с главной кнопочной формой «Training_students» — Скачать
2.3. Программные средства презентаций и основы офисного программирования
2.3.7. Основы офисного программирования
Визуальный язык программирования Бейсик для приложений: Visual Basic for Applications (VBA)
VBA – это подмножество визуального языка программирования Visual Basic (VB), которое включает почти все средства создания приложений VB.
VBA отличается от языка программирования VB тем, что система VBA предназначена для непосредственной работы с объектами Office, в ней нельзя создавать проект независимо от приложений Office. Таким образом, в VBA языком программирования является VB, а инструментальная среда программирования реализована в виде редактора VB, который может активизироваться из любого приложения MS Office.
Например, для того, чтобы открыть редактор VBA из приложения PowerPoint необходимо выполнить команду Сервис / Макрос / Редактор VBA. Вернуться из редактора в приложение можно, выбрав команду Microsoft PowerPoint в меню Вид или комбинацией клавиш Alt + F11.
С помощью встроенного в редактор VBA набора элементов управления и редактора форм пользователь может создать пользовательский интерфейс для разрабатываемого проекта с экранной формой. Элементы управления являются объектами, а для каждого объекта определен ряд возможных событий (например, щелчок или двойной щелчок мыши, нажатие клавиши, перетаскивание объекта и т.д.).
Каждое событие проявляется в определенных действиях программы (откликах, реакции). Пользовательская форма позволяет создавать окна диалога приложений. Язык программирования VBA служит для написания кода программы, например для создания функций пользователя в Excel.
Тот факт, что система программирования VBA предназначена для работы с объектами Office, позволяет эффективно ее применять для автоматизации деятельности, связанной с разработкой различных типов документов.
Рассмотрим алгоритм создания функций пользователя в VBA:
1. Вызвать окно редактора кода VBA, выполнив команду Сервис / Макрос / Редактор Visual Basic или нажать Alt+F11.
2. Выполнить пункт меню редактора Insert / Module (Вставка / Модуля).
3. Далее выполнить Insert / Procedure (Вставка /Процедура). В открывшемся диалогом окне Add Procedure ввести имя функции (например, СУММА5) и установить переключатели: Type (тип) – в положение Function (функция); Scope (Область определения) — в положение Public (Общая) и щелкнуть ОК.
4. В окне редактора для программирования VBA появится заготовка функции: заголовок — Public Function СУММА5() и окончание — End Function, между которыми надо поместить код тела функции.
5. Далее вводим список параметров функции, например, в скобках указываем (x, y, z, i, j), тип данных (для точных расчетов) и тип возвращаемого функцией значения (в данном примере не будем вводить). Кроме того, вводим тело функции, например, СУММА5 = x + y + z + i + j. В итоге получим следующий текст программы:
Public Function СУММА5(x, y, z, i, j)
СУММА5 = x + y + z + i + j
End Function
6. Возвращаемся в окно приложения Excel, в котором, например, нам необходимо выполнить суммирование пяти значений.
7. Выполняем «Вставка/Функция» и в открывшемся окне мастера функций выбираем категорию «Определенные пользователем», а в окне «Выберите функцию» выделяем СУММА5 и щелкаем ОК.
8. Далее выбираем ячейки со значениями и щелкаем ОК. Получаем следующий результат.
Макросы
Создадим макрос для автоматического суммирования двух чисел в ячейках A1, B1 и размещения результата в ячейке C1, а также заливки ячейки C1 бирюзовым цветом.
Алгоритм создания макроса для поставленной задачи:
1. Выберите Сервис/Макрос, Начать запись.
2. В поле Имя макроса введите имя для макроса. Первым символом имени макроса должна быть буква. В имени макроса не допускаются пробелы; в качестве разделителей слов можно использовать знаки подчеркивания.
3. Для того чтобы запускать макрос с помощью сочетания клавиш, введите букву в поле Сочетание клавиш. Допускается использование сочетаний CTRL+ буква (для строчных букв) или CTRL+SHIFT+ буква (для прописных букв), где буква — любая буквенная клавиша на клавиатуре. Не выбирайте стандартного сочетания клавиш, так как выбранное сочетание клавиш подавляет стандартные сочетания клавиш Microsoft Excel на то время с данной книгой.
4. В поле «Сохранить» выберите книгу, в которой требуется сохранить макрос. Сохраните макрос в «Эта книга». Для создания краткого описания макроса, введите необходимый текст в поле Описание. На скриншоте представлен пример заполнения окна диалога «Запись макроса»
5. Нажмите кнопку OK.
6. Выполните макрокоманды, которые нужно записать.
7. Нажмите кнопку Остановить запись на плавающей панели инструментов «Ос» (Остановить запись) или Сервис / Макрос / Остановить макрос.
По окончании записи макроса он появляется в списке макросов под своим именем.
Редактор VBA автоматически записал последовательность макрокоманд или программу по выполненным действиям (Рис. 7.).
Для вызова макроса необходимо выполнить команду Сервис / Макрос / Макросы. После этого в диалоговом окне со списком макросов его можно найти по имени и нажать кнопку Выполнить.
Назначение кнопки панели инструментов для запуска макроса
Макрос можно запустить с помощью кнопки на встроенной панели инструментов, для этого необходимо выполнить:
- Выбрать пункт Настройка в меню Сервис.
- В окне диалога Настройка выбрать вкладку Команды и выбрать параметр Макросы в списке Категории, в списке Команды выделить «Настраиваемая кнопка».
- Из списка Команды перетащить с помощью мыши настраиваемую кнопку на панель инструментов.
- Щелкнуть эту кнопку правой кнопкой мыши и выбрать команду Назначить макрос в контекстном меню.
- Ввести имя макроса в поле Имя макроса.
Назначение области графического объекта для запуска макроса:
- Создайте графический объект.
- К выделенному графическому объекту, примените контекстное меню.
- Выберите в контекстном меню команду Назначить макрос.
- В появившемся окне диалога «Назначить макрос объекту», введите название макроса в поле Имя макроса, затем нажмите кнопку OK.
Редактирование макроса осуществляется редактором VBA, для этого необходимо выполнить следующее:
- Выбрать команду Сервис / Макрос / Макросы.
- Выбрать имя макроса, который следует изменить, в списке Имя.
- Нажать кнопку Изменить, будет открыто окно Visual Basic, в котором возможно редактирование команд выбранного макроса, записанных на языке Visual Basic.
- В меню Сервис выберите пункт Макрос, а затем — команду Макросы.
- В списке макросов текущей рабочей книге необходимо выбрать макрос, который предполагается удалить и нажать кнопку Удалить.
Для переименования макроса необходимо войти в режим редактирования макроса и в тексте программы изменить заголовок. Новое имя автоматически заменит старое в списках макросов, и по клавишам быстрого вызова будет вызываться макрос с новым именем.
Copyright
© Обучение в интернет, .
Обратная связь
Основы программирования на VBA
Операторы
Microsoft делит операторы в VBA на арифметические, объединения, сравнения и логические, что, в общем, сразу и нарушает. Поэтому мы пойдем немного своим путем, что сути не изменит, но упростит понимание.
Первичная суть заключается в том, что с помощью операторов можно оценить данные или произвести их простейшие изменения.
В отличие от других операторов, присваивание может быть использовано в строке только один раз, в связи с чем во многих случаях для него используется предварительное двоеточие: Unit:=wdCharacter.
В Visual Basic двоеточие служит для оформления нескольких строк в одну. Зачастую это не только делает текст более компактным, но и помогает быстрее его понять:
x(1,1) = «Иванов» : x(1,2) = «Иван» : x(1,3) = «Иванович» : x(1,4) = «01.01.1990»
Операторы сравнения
Возвращают значение True, False или NULL.
Одной из наиболее серьезных проблем остается понимание, что сравнивать несравнимое тоже можно. Только результат будет существенно отличаться от общечеловеческой логики. Подробнее см. у Microsoft.
Логические операторы
Также можно изучить материал, посвященный алгебре логики.
Логические операторы располагаются между двумя логическими выражениями, каждое из которых так или иначе либо истинно, либо ложно.
Переменные и типы данных
Именование переменных
Создание переменных
Если не задана обязательность объявления переменной (Option Explicit), то любая переменная может быть создана самим фактом ее использования. То есть строка x = 1 создаст переменную x с типом Variant и присвоит ей числовое значение единицы.
При этом ничто не препятствует использовать команду создания с указанием типа (необязательным), например,
Dim x As Integer
Несколько переменных в одной строке указываются через запятую.
Dim x As Integer, y As String
Создание массивов см. в разделе Действия над массивами.
Область видимости переменных
Краткий смысл темы заключается в том, откуда можно обратиться к переменной, чтобы считать значение и/или изменить его: только из программы, любой программы модуля, из любого модуля.
По умолчанию действует следующая схема.
- Переменные, объявляемые на уровне процедуры переменные доступны только внутри соответствующей процедуры.
- Переменные, объявляемые на уровне модуля (в области общих задач), доступны всем процедурам внутри этого модуля, но имеют статус Private.
- Переменные, объявляемые на уровне модуля как глобальные (общие, Public), доступны для всех процедур в проекте.
- Константы являются частными (Private) по умолчанию. Внутри процедур константы всегда являются частными, их видимость изменить нельзя. В стандартных модулях по умолчанию видимость констант уровня модуля(!) можно изменить с помощью ключевого слова Public.
Основные типы данных
Хотя типов данных (точнее программных переменных, в которых данные хранятся) довольно много, можно выделить и сгруппировать наиболее важные, имеющие общие правила обработки.
В квадратных скобках указан размер в байтах. Кроме указания на место, занимаемое в памяти, для многих типов это определяет возможный диапазон значений. Так, 2 байта для целых чисел дают 2 2*8 (65536) значений. Но один бит используется для указания знака, что ограничивает диапазон значений 2 15 (до ±32768).
- Логический (булевый, Boolean) [2]. Служит для хранения логической информации: True (истина) или False (ложь).
Для обозначения используются True и False, для функции «Write #» — #TRUE# и #FALSE#. - Символьный (String, text, character, строковый) [длина строки]. Понятно, что львиная доля информации хранится в виде символов. Может содержать символы с кодами от 0 до 255!
Делится на две разновидности:- Строка фиксированной длины [1–2 16 ].
Объявляется командой типа (для 5 символов): Dim а As String * 5 - Строка переменной длины [1–2 31 ].
- Строка фиксированной длины [1–2 16 ].
- Числовой (Numeric). Один из наиболее разветвленных видов, что связано с множеством условий и возможностей для работы с числовой информацией, а также её особой важностью для обработки программными средствами.
- Целочисленный (integer, byte, long) [1–8]. Может хранить только целые числа.
- Целочисленный (Byte) [1]. Число от 0 до 255. Парадокс, но в этом типе выгоднее хранить логическую информацию, чем в Boolean.
- Целочисленный (Integer) [2]. Число от –32 768 до 32 767.
- Целочисленный (Long) [4]. Число от –2 147 483 648 до 2 147 483 647.
- Целочисленный (LongLong) [8]. Число от –9 223 372 036 854 775 807 до 9 223 372 036 854 775 807.
- С плавающей точкой (Float) в чистом виде в VBA отсутствует и делится на два конкретных подвида.
- Single [4]. Диапазоны:
от –3,402823E38 до –1,401298E-45 для отрицательных значений,
от 1,401298E-45 до 3,402823E38 для положительных значений. - Double [8]. Диапазоны:
от –1,79769313486231E308 до –4,94065645841247E-324 для отрицательных значений
от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений
- Single [4]. Диапазоны:
- Денежный (Currency) [8]. Точность указания чисел — с обязательными четырьмя десятичными разрядами. Иногда называют банковским типом, хотя последний должен содержать 8 десятичных разрядов. Может хранить число от –922 337 203 685 477,5808 до 922 337 203 685 477,5807.
- Десятичный (Decimal) [12]. Диапазон хранимых данных зависит от точности (числа десятичных разрядов) и наличия знака.
- Целочисленный (integer, byte, long) [1–8]. Может хранить только целые числа.
- Даты (Date) [8] в виде чисел с плавающей запятой. Диапазон дат: от 1 января 100 до 31 декабря 9999 г. Нулю соответствует 1 января 1900 г.
Десятичная часть соответствует доле суток, то есть времени. - Время (Time) как описанный тип в VBA отсутствует, для него используется десятичная часть от Date. При этом команда MyTime = #17:04:23# создаст переменную, содержащую время, есть функции для его обработки. Мда.
- Для Visual Basic и VBA характерно наличие особого универсального типа переменной (Variant), которая может хранить значения большинства других типов.
- Другое. Collection, Dictionary, Object [4].
Действия над данными
Если для числовых данных и, соответственно, переменных арифметические действия являются само собой разумеющимися, то для других типов обычно возникают некоторое непонимание. Разрешить его вполне можно с помощью логических рассуждений.
Символьные данные обычно используются в операции сложения (объединения/конкатенации), когда нужно собрать из кусочков выражение. Все участвующие фрагменты должны быть только символьного типа, либо преобразовываться в него. Сложение символов обычно вызывает только одну трудность: учет стыковочных пробелов. С одной стороны, пробелы не появляются сами по себе (и два слова могут склеиться). С другой, наличие множества пробелов в конце первого фрагмента также должно быть учтено (иначе возникнет большой пробел между фрагментами).
Кроме этого, в строке можно найти фрагмент (номер символа, с которого он начинается) или выделить (скопировать в переменнуюю) фрагмент слева, справа или из произвольного места.
Логические данные полностью подчиняются законам алгебры логики. Хотя бояться этого точно не стоит: подобные дебри бесконечно редко возникают в программировании, все остается на уровне максимального примитива. Три оператора (Or, And, Not) покрывают более 99% случаев и относятся к области одновременной оценки нескольких объектов или разных характеристик одного объекта.
Дата на самом деле хранится как число и может вычитаться из даты (разница в днях), либо к ней можно прибавить целое число (будущая дата), или вычесть целое число (дата в прошлом).
В связи с вышеизложенным, для того чтобы выполнить над данными определенные действия, во многих случаях необходимо произвести изменение (преобразование) их типа.
Действия над массивами
Массивом называется специфический вид переменной, содержащий некое множество структурированных данных (элементов). Для восприятия удобно рассматривать массивы в виде таблицы. На этом же основана логика обращения к данным.
Соответственно, можно условно выделить три варианта:
- Одномерный массив, то есть состоящий из одной колонки.
- Двумерный массив представляет собой истинную простую таблицу (n колонок на m строк).
- Многомерный массив в VBA может содержать до 60 измерений. Реально можно представить трехмерный массив, в виде набора простых двумерных таблиц, расположенных друг за другом.
Нумерация элементов массива в VBA по умолчанию начинается с нуля. Это определяется директивой Option Base.
Функция Array позволяет создать одномерный массив путем перечисления его значений:
A_Arr = Array(1, 5, 15)
В норме же, массив объявляется командой Dim. В первом варианте указываются его размеры. Следующая команда создает одномерный массив из 21 элемента с индексами от 0 до 20, для размещения символьной информации.
Dim MyArray(20) As String
Следующая команда создает двумерный массив (с типом данных Variant, который используется по умолчанию).
Во втором варианте определяется набор индексов элементов (от и до) создаваемого массива. Следующая команда создает массив из 10 элементов с индексами от 1 до 10.
Dim MyArray(1 To 10)
Команда может включать несколько диапазонов, например, для трехмерного массива:
Dim MyArray(1 To 5, 4 To 9, 3 To 5)
Наконец, самый примитивный вариант создает массив с именем, требующий последующего задания размерности (командой ReDim).
Обращение к элементу массива производится по имени с указанием координат.
Уже имеющийся массив нельзя объявить снова, например, для изменения размера. Для этого необходимо воспользоваться командой ReDim ( ):
Названной командой можно изменить размеры нескольких массивов, перечисляя их через запятую.
Использование в команде ключевого слова Preserve не только пересоздаст массив, но и сохранит в нем предыдущие значения. Естественно, с потерей части данных в случае уменьшения размера.
ReDim Preserve A_Arr(20, 8)
Существующий массив может быть исследован на размеры функциями
- LBound(имя_массива, [размерность]) определяет минимальный индекс в указанной размерности. При отсутствии ссылки на размерность, подразумевается 1 (одномерный массив).
- UBound(имя_массива, [размерность]) определяет максимальный индекс в указанной размерности.
Из этих функций можно получить потенциальную реализацию цикла
For i = LBound(arr1) To UBound(arr1)
То есть от минимального элемента до максимального. (Приведенный код является нерациональным, и лишь иллюстрирует принцип!)
Функция Split( , ) позволяет разобрать строку и поместить результат в одномерный массив, начинающийся с нуля. Например, список через запятую или слова, разделенные пробелом.
Функции
Функции представляют собой подпрограммы, выполняющие некоторую обработку информации и всегда возвращающие результат этой обработки. Функция — классический пример вспомогательного алгоритма. Именно функции обладают наиболее выраженным свойством массовости, так как многократно используются при решении большого и разнообразного числа задач.
Вызов функций, как правило, одинаковый:
переменная = ИмяФункции([аргументы через запятую]).
Число аргументов может быть различным, что указывается в описании. Некоторые из них являются необязательными, и их приводят в конце списка для удобства использования.
Порядок указания аргументов задается строго. Менять их местами нельзя! Если значение среднего аргумента опускается, то должна быть поставлена пустая запятая:
Но! В описании функции может быть указано, что первый аргумент необязательный, а его значение присваивается по умолчанию (см. InStr()).
Тип каждого аргумента также задается достаточно строго и в большинстве случаев не может быть изменен.
Вместе с тем, многие функции могут не иметь аргументов вообще, так как обрабатывают определенную заранее системную информацию. Например, функция Date() во многих языках.
Ниже приведены некоторые наиболее важные функции с их разбивкой по принципу типа обрабатываемой информации (в алфавитном порядке). Как показывает практика, подобное разделение наиболее эффективно.