Web-studio46.ru

Обучение и образование
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

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

������� ���������� ��������� �� ����� VBA – �������, ����� �������� �� ���������� ������, � ����������� �� ��������� ����������. ���� ���������� �������� ���������, ������� ����� ����������� ������������ ���������� ��� ��������, ����������� �������������� ����������� ������������ ���������� Microsoft Office, �� ���������� ������� ����������� ������. ��� ���������� ���� ��������� ����� ��������� � ������� ������� ���������� ������, ������� ������� ����� �������� ���������� ���������. ��� ����� � ���������� ���������� �������� ������ ������������ � ������� ������� ��� ������ ������������ �������� ����������, � ����� ������� ������ � ��������������� ����������� �����. ���� ��������� ��������� � ������� ������� ������ ������ �������.

���������� “�����������” ��������� (��� ���������� ������� ��������� ��������� ����, � ���������� ���������� ����������) ����� �������� ��� �����. ������ ���� – ���� ����������� ����������������, �� ������� ��������� ���� (�����) ���������, ��� ������������� ����������� �������� ����������. ������ – ���� ����������������, �� ������� ��������� ����� ��������� (���������), ������������� � ����� �� ������������ �������. �������� ��������, ��������, ������ ����� ������� ���� �� ��������� ������ (������� Click), ������� ������� �� ���������� (������� KeyPress) � �.�. ������������ ����� ���������� ����� �������� ������ – «������ �������».

Range(“�����”)

Cells(i, j)

Rows(� ������)

Columns(� �������)

Sheets(“���”)

Sheets(� �����)

WorkSheet

Range(“A5:A10”). Value = 0 ��� Range(“A5:A10”) = 0 – � �������� ����� A5:A10 ��������� �������� 0.

Cells(2, 4). Value = n ��� Cells(2, 4) = n – � ������, ����������� �� ����������� 2-� ������ � 4-�� ������� (������ � ������� “D2”), ��������� �������� ���������� n.

Xn = Cells(1, 2).Value ��� Xn = Range(“B1”).Value – ���������� Xn ������������� �������� �� ������ B1 �������� �������� �����.

Sheets(2).Activate ������� �������� ���� � �2.

Sheets(“���������”).Delete ������� ���� � ������ “���������”.

Range(«A5:A10»).Clear – �������� �������� ����� A5:A10.

Range(«A2:B10»).Select – �������� �������� ����� A2:B10.

Application.Quit — ���������� ������ � Excel.

VBA Excel. Начинаем программировать с нуля

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

Знакомство с редактором VBA

  1. Создайте новую книгу Excel и сохраните ее как книгу с поддержкой макросов с расширением .xlsm. В старых версиях Excel по 2003 год – как обычную книгу с расширением .xls.
  2. Нажмите сочетание клавиш «левая_клавиша_Alt+F11», которое откроет редактор VBA. С правой клавишей Alt такой фокус не пройдет. Также, в редактор VBA можно перейти по ссылке «Visual Basic» из панели инструментов «Разработчик» на ленте быстрого доступа. Если вкладки «Разработчик» на ленте нет, ее следует добавить в настройках параметров Excel.

В левой части редактора VBA расположен проводник проекта, в котором отображены все открытые книги Excel. Верхней строки, как на изображении, у вас скорее всего не будет, так как это – личная книга макросов. Справа расположен модуль, в который записываются процедуры (подпрограммы) с кодом VBA. На изображении открыт модуль листа, мы же далее создадим стандартный программный модуль.

  1. Нажмите кнопку «Module» во вкладке «Insert» главного меню. То же подменю откроется при нажатии на вторую кнопку после значка Excel на панели инструментов.

После нажатия кнопки «Module» вы увидите ссылку на него, появившуюся в проводнике слева.

Первая программа на VBA Excel

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

  1. Откройте стандартный модуль двойным кликом по его ссылке в проводнике. Поместите в него курсор и нажмите кнопку «Procedure…» во вкладке «Insert» главного меню. Та же ссылка будет доступна при нажатии на вторую кнопку после значка Excel на панели инструментов.

В результате откроется окно добавления шаблона процедуры (Sub).

  1. Наберите в поле «Name» имя процедуры: «Primer1», или скопируйте его отсюда и вставьте в поле «Name». Нажмите кнопку «OK», чтобы добавить в модуль первую и последнюю строки процедуры.

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

  1. Вставьте внутрь шаблона процедуры следующую строку: MsgBox «Привет» .

Функция MsgBox выводит информационное сообщение с указанным текстом. В нашем примере – это «Привет».

  1. Проверьте, что курсор находится внутри процедуры, и запустите ее, нажав клавишу «F5». А также, запустить процедуру на выполнение можно, нажав на треугольник (на изображении под пунктом меню «Debug») или на кнопку «Run Sub/UserForm» во вкладке «Run» главного меню редактора VBA Excel.
Читать еще:  Программирование на андроид с нуля для чайников


Если вы увидели такое сообщение, как на изображении, то, поздравляю – вы написали свою первую программу!

Работа с переменными

Чтобы использовать в процедуре переменные, их необходимо объявить с помощью ключевого слова «Dim». Если при объявлении переменных не указать типы данных, они смогут принимать любые доступные в VBA Excel значения. Комментарии в тексте процедур начинаются со знака «’» (апостроф).

Пример 2
Присвоение переменным числовых значений:

VBA-Урок 1. Что такое VBA. Основные понятия.

В данном разделе мы рассмотрим что такое VBA, посколько именно на нем и пишутся макросы.

Что такое VBA?

VBA — язык (расшифровывается как Visual Basic for Application) был разработан компанией Microsoft. Данный язык не является самостоятельным, а предназначен для автоматизации процессов в пакете MS Office. VBA широко используется в Excel, а также в Access, Word и других программах пакета.

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

Чтобы работать с VBA кодом, нам нужен редактор, который уже установлен по умолчанию. Вы можете открыть его, нажав комбинацию клавиш » ALT + F11 «.

Объекты (Objects)

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

Главный объект это Application, что соответствует самой программе Excel. Далее следует Workbooks (книга), Worksheets (лист), Range (диапазон, или отдельная ячейка). Например, чтобы обратиться к ячейке «A1» на листе нам нужно будет прописать следующий путь с учетом иерархии:

Application.Workbooks(«Архив»).Worksheets(«Аркуш1»).Range(«A1»).

Таким образом, мы научились обращаться до наименьшего объекта в Excel — ячейки.

Коллекции (Collections)

В свою очередь объекты имеют «коллекции». Коллекция — это группа объектов одинакового класса. Отдельные элеметы коллекции являются также объектами. Так, объекты Worksheets являются элементами коллекции объекта Worksheet, который содержит также и другие коллекции и объекты:

  • ChartObjects (элемент коллекции объекта ChartObject)
  • Range
  • PageSetup
  • PivotTables (элемент коллекции объекта PivotTable).

Свойства (Properties)

Каждый объект имеет свойства . Например, объект Range имеет свойство Value или Formula.

Worksheets(“Sheet1”).Range(“A1”).Value або Worksheets(“Sheet1”).Range(“A1”).Formula

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

Также, через свойство Formula можно не только получить формулу, но и записать ее:

MsgBox Range(“A1”).Formula — получим сообщение с формулой в ячейке «А1«;

Range(“B12”).Formula = “=2+6*100” — вписываем формулу =2+6*100 в ячейку B12.

Методи (Methods)

Теперь давайте рассмотрим, каким образом мы можем управлять содержимым диапазона или ячейки. Для этого в VBA существуют, так-называемые методы (команды «что сделать»). При написании кода методы отделяются от объекта точкой, например:

Range(«A1»).Select или Cells(1, 1).Select

Данный метод указывает выбрать (Select) ячейку «A1».
Далее, давайте, удалим значение в данной ячейке. Для этого напишем следующий код:

Selection.ClearContents

Здесь программа «берет» то, что мы выделили (Selection) и удаляет его содержимое (ClearContents ).

Основы программирования на 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

Создание массивов см. в разделе Действия над массивами.

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

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

По умолчанию действует следующая схема.

  1. Переменные, объявляемые на уровне процедуры переменные доступны только внутри соответствующей процедуры.
  2. Переменные, объявляемые на уровне модуля (в области общих задач), доступны всем процедурам внутри этого модуля, но имеют статус Private.
  3. Переменные, объявляемые на уровне модуля как глобальные (общие, Public), доступны для всех процедур в проекте.
  4. Константы являются частными (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 ].
  • Числовой (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 для положительных значений
    • Денежный (Currency) [8]. Точность указания чисел — с обязательными четырьмя десятичными разрядами. Иногда называют банковским типом, хотя последний должен содержать 8 десятичных разрядов. Может хранить число от –922 337 203 685 477,5808 до 922 337 203 685 477,5807.
    • Десятичный (Decimal) [12]. Диапазон хранимых данных зависит от точности (числа десятичных разрядов) и наличия знака.
  • Даты (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% случаев и относятся к области одновременной оценки нескольких объектов или разных характеристик одного объекта.

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

В связи с вышеизложенным, для того чтобы выполнить над данными определенные действия, во многих случаях необходимо произвести изменение (преобразование) их типа.

Действия над массивами

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

Соответственно, можно условно выделить три варианта:

  1. Одномерный массив, то есть состоящий из одной колонки.
  2. Двумерный массив представляет собой истинную простую таблицу (n колонок на m строк).
  3. Многомерный массив в 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() во многих языках.

Ниже приведены некоторые наиболее важные функции с их разбивкой по принципу типа обрабатываемой информации (в алфавитном порядке). Как показывает практика, подобное разделение наиболее эффективно.

Ссылка на основную публикацию
Adblock
detector