Remkomplekty.ru

IT Новости из мира ПК
13 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel классы

Vba excel классы

Создание приложения на vba путем написания процедур и функций стоит называть процедурным программированием. Написание участков кода, называемых процедурами и функциями, которые описывают какое-либо действие, и последующее последовательное исполнение этих кодов, является основным методом программирования на vba. При этом используется доступ к объектной модели Excel или других приложений. Данные и подпрограммы (функции и процедуры) функционально не связаны между собой. Это значит, что объявляя переменную «длина хвоста» на уровне модуля, нельзя задать ей различные значения для двух процедур.

При объектно-ориентированном программировании (ООП) подход иной. Данные и подпрограммы связаны между собой и описываются в классе.

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

Класс имеет следующую структуру:

Поле – элемент класса для хранения данных,

Свойство – элемент класса для хранения данных с возможностью их обработки,

Метод – аналог процедуры или функции,

Событие – сигнал при изменении состояния объекта, например исполнения метода или изменения данных.

Из всех принципов ООП в vba реализуемы только два: Абстрагирование и инкапсуляция.

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

Для создания класса в vba редакторе выберите в меню Insert строку Class Module. Назовите созданный класс путем переименования созданного модуля. В файле с примером он называется ExampleClass. А модуль, демонстрирующий использование этого класса называется ExClassManagement. В свойствах класса, кроме имени так же есть параметр Instancing. Указывается, будет ли виден класс из другой книги при установке ссылки на данную книгу. При установке Private (по умолчанию) класс виден только в данной книге, при установке PublicNotCreatable, класс не будет доступен из другой книги, однако экземпляр класса доступен будет, если он создан в данной книге.

Класс — это всего лишь описание объекта. Для использования возможностей класса, необходимо создать экземпляр класса (объект). Существует несколько способов:

Данный способ корректен абсолютно

Способ 2:

Этот способ отличается от первого способа тем, что экземпляр класса объявляется вне процедуры и работать с ним можно во всех процедурах модуля. При замене Dim на Public экземпляр класса доступен во всем проекте, если объявляется вне объектного модуля.

Экземпляр класса объявляется с событиями, и если в классе описаны события объекта, они будут доступны. Работает только при объявлении в объектном модуле (модуль класса, формы, листа, книги)

Способ 4:

Так называемый неявный метод создания экземпляра класса. В этом случае объект создается при первом обращении к переменной cl. Наверное, предпочтительнее сначала объявлять переменную (выделяется память), а затем явно создавать объект.

Естественно, после использования экземпляра класса, необходимо очистить память. Делается это одним способом:

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

Созданный класс ExampleClass не имеет полей, свойств, методов, событий, поэтому и созданный на его основе объект (экземпляр класса) cl, так же бесполезен.

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

И теперь свойство Head доступно у экземпляра класса cl.

В него можно записать

Создать поле с пользовательским типом данных не удастся.

Поля используются для хранения данных в объекте. Данные будут доступны, пока объект существует. Однако нельзя указать значение по-умолчанию для поля и нельзя сделать поле только для чтения.

Свойство это способ доступа к данным внутри объекта. Выглядят как поля, однако, это функции (назовем их методами). Называются они Property Get для чтения данных из объекта, и Property Let для записи данных в объект. Есть еще третье Property Set для установки ссылки на другой объект. Но это можно сделать и при помощи Property Let, поэтому Property Set вещь бесполезная.

Синтаксис Property Get

[Public | Private | Friend] [Static] Property Get имя [(аргументы)] [As тип]

[произвольный код]
[имя=выражение]
[Exit Property]

[произвольный код]
[имя=выражение]
[End Property]

Работа с модулями классов

Многие наверняка слышали про модули классов, но не все их используют. На самом деле довольно многие программирующие на VBA за все время программирования прекрасно обходятся без применения модулей классов. Т.к. VBA не является языком объектно-ориентированного программирования(ООП) в строгом смысле слова, то пользовательские классы здесь не обязательны и как следствие не так уж и часто используются при разработке. Это не значит, что VBA не содержит модулей классов: модули книги, листов, пользовательские формы — все это модули классов. Многие, кстати, используют их даже не зная того, что используют именно модули классов. Т.к. модуль листа, книги и формы — это модуль класса, то почти каждый, кто работал с формой работал с модулем класса. В чем их большая польза — с их помощью можно отслеживать различные события объектов. Для форм это события самой формы или любого её элемента — например CommandButton_Click или TextBox_Change. Но мы сейчас рассмотрим лишь тот тип модулей, который в VBA обычно называют модулем класса — Class Module.

Модуль класса(Class Module) – это модуль, содержащий программные коды, которые реализуют работу пользовательских классов. В подавляющем большинстве случаев создается специально для отслеживания событий различных объектов. Создается так же, как и любой другой объект проекта: в окне проводника объектов щелкаем правой кнопкой мыши на нужном проекте-InsertClass Module

Но прежде чем создать модуль, необходимо понять, что мы будем в нем хранить и для чего он нам. Возьмем для примера самую распространенную проблему: на форме создано несколько ТекстБоксов и необходимо отследить событие ввода данных в эти ТекстБоксы. Обычно делается все просто — для каждого ТекстБокса прописывается отслеживание события:

Private Sub TextBox1_Change() MsgBox «Изменено значение TextBox1» End Sub Private Sub TextBox2_Change() MsgBox «Изменено значение TextBox2» End Sub Private Sub TextBox3_Change() MsgBox «Изменено значение TextBox3» End Sub ‘и т.д.

С одной стороны — все верно. А с другой: что если таких текстбоксов у нас не 3, а 43? Не очень удобно для каждого событие прописывать. Да и читабельность такой «портянки» кода тоже значительно падает.
Или другая ситуация — необходимо «на ходу» создать ТекстБоксы на форме и в дальнейшем отслеживать их события. Как тут быть? Ведь раз ТексБоксов еще нет — то и события в форме для них не создать. Создание для них кодов обработки событий заранее ничего не даст — они не будут связаны с самими объектами, поэтому и пытаться даже не стоит. Почему так — при создании элемента вручную VBE делает за нас всю грязную работу — он сам ассоциирует созданный объект с событиями, предназначенные для него заранее. Если же создать объект программно — то часть грязной работы придется делать самим. И создание модуля класса, с описанием в нем объекта ТекстБокс и его событий, как раз очень даже подойдет.
Рассмотрим сразу оба случая. Что нам для этого потребуется:

  1. для начала создать модуль класса с именем clsmTxtBxes(InsertClass Module)
  2. создать стандартный модуль с именем mMain(InsertModule)
  3. ну и сама форма тоже не лишняя(InsertUserForm). У меня форма называется frmTest.
  4. очень желательно наличие у вас опыта написания хотя бы простейших процедур. Иначе может показаться все очень сложным и непонятным.
Читать еще:  Как скачать видео с hdrezka ag

Чтобы было проще вникать советую скачать файл с готовыми кодами:

Tips_Macro_UseClassModules.xls (63,5 KiB, 4 390 скачиваний)

Для начала создадим на нашей форме frmTest 4 ТекстБокса, не меняя их имена(по умолчанию они будут TextBox1, TextBox2, TextBox3, TextBox4). Это для того, чтобы понять как применить модули класса к уже созданным ранее на форме элементам.
Далее в стандартный модуль mMain поместим следующий код:

Option Explicit Public aoTxtBxes(1 To 8) As New clsmTxtBxes Sub Show_Form() frmTest.Show End Sub

aoTxtBxes — массив, который будет содержать до 8 ТекстБоксов. Объявляется как Public (чтобы был доступен из любого модуля проекта. Подробнее в статье: Что такое переменная и как правильно её объявить?). Обращаю внимание, что данный массив объявлен как созданный нами модуль класса — As clsmTxtBxes. Это обязательное условие. Если у вас модуль класса называется ClassModule1, то и объявлять aoTxtBxes следует соответственно:

Public aoTxtBxes(1 To 8) As New ClassModule1

но я не приветствую подобный подход, т.к. имя ClassModule1 ни о чем нам не говорит, в то время как clsmTxtBxes сразу дает понять, что там мы обрабатываем ТекстБоксы. Хотя это дело вкуса. Если в одном модуле класса собраны различные событийные процедуры для разных типов( TextBox , ComboBox , ListBox и т.д.) — то конечно, имя лучше дать более общее.
Теперь в созданный модуль класса clsmTxtBxes запишем создание объекта и код, который хотим применить для всех наших ТекстБоксов:

Option Explicit Public WithEvents oTxtBx As MSForms.TextBox ‘событие изменения текста в TextBox-ах Private Sub oTxtBx_Change() MsgBox «Вы изменили значение » & oTxtBx.Name, vbInformation, «Информационное окно» End Sub

Public WithEvents oTxtBx As MSForms.TextBox — создаем объект типа ТекстБокс с отслеживанием его событий. Идентификатором объекта с отслеживанием событий служит оператор WithEvents (может применяться только в модулях классов).
Если необходимо отследить изменения не TextBox, а ComboBox, то соответственно объявляем объект нужного типа:
Public WithEvents oCmbBx As MSForms.ComboBox
Сами события для контролов не берутся из головы и не пишутся вручную — они уже есть и следует использовать именно те, которые доступны. Чтобы для конкретного элемента создать событие, необходимо перейти в модуль класса, вверху в левой части выбрать из списка нужный объект(в нашем случае это oTxtBx) и после этого в правом списке выбрать событие(в этом списке перечисляются все процедуры, доступные для выбранного объекта):

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

Завершающий этап — создаем код в модуле формы frmTest , который создаст недостающие ТекстБоксы и свяжет их и ранее созданные с модулем класса:

Option Explicit Private Sub UserForm_Initialize() Dim i As Integer ‘Присваиваем последовательно значениям массива aoTxtBxes значения объектов, существующих на форме For i = 1 To 4 Set aoTxtBxes(i).oTxtBx = Me.Controls(«TextBox» & i) Next i ‘создаем 4 своих TrxtBox-а помимо имеющихся на форме и так же заносим в массив aoTxtBxes For i = 5 To 8 Set aoTxtBxes(i).oTxtBx = Me.Controls.Add(«Forms.TextBox.1», «TextBox» & i) ‘задаем позицию нового TextBox aoTxtBxes(i).oTxtBx.Left = 100 aoTxtBxes(i).oTxtBx.Top = Me.Controls(«TextBox» & i — 4).Top Next i End Sub

Кратко описать, что делает эта процедура, можно так:

  1. при запуске формы в массив aoTxtBxes запоминаются сначала те ТекстБоксы, которые мы предусмотрительно заранее создали на форме
  2. затем создаются еще 4 новых ТекстБокса, которые также записываются в массив aoTxtBxes
  3. Т.к. массив aoTxtBxes у нас является новым экземпляром класса, то обращаться к его содержимому мы можем только по законам работы с классами, т.е. только к тем объектам и методам, которые в классе прописаны. А у нас там пока только один объект прописан — oTxtBx( Public WithEvents oTxtBx As MSForms.TextBox ). Его и используем. Ничего другого использовать VBE нам и не позволит
  4. т.к. класс мы создали, событие объекта прописали, объектам значения ТекстБоксов присвоили — остается только наслаждаться. Теперь любое изменение в любом из ТекстБоксов будет обработано и появится сообщение — «Вы изменили значение » + имя ТекстБокса

Если необходимо больше ТекстБоксов обработать — увеличиваем верхнюю границу массива aoTxtBxes(если хотим вместить 20 текстбоксов — Public aoTxtBxes(1 To 20) As New clsmTxtBxes ). Если заранее неизвестно количество — либо задаем с запасом, либо объявляем aoTxtBxes как динамический массив( Public aoTxtBxes() As New clsmTxtBxes ), а границы определяем в процессе(посредством ReDim Preserve ). Но это уже совершенно другая тема.

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

ПОЛЬЗОВАТЕЛЬСКИЕ ОБЪЕКТЫ

Создание модулей класса

В VBA наряду с огромным числом встроенных объектов предусмотрена возможность создания пользовательских объектов. Использование таких объектов позволяет сократить текст программы и сделать его более понятным. Пользовательские объекты являются элементами пользовательских классов (или образно говоря, классы являются формами, из которых «пекутся» конкретные объекты). Пользовательские классы конструируются в модулях классов, которые создаются в редакторе Visual Basic выбором команды Вставка, Модуль класса (Insert, Class Module). При создании классов надо предусмотреть его инициализацию, описание свойств и методов, которыми будет наделен объект.

Опишем процесс создания класса в виде следующей последовательности шагов:

  1. Выберите команду Вставка, Модуль класса (Insert, Class Module). Откроется окно нового модуля класса.
  2. Нажмите клавишу и присвойте в появившемся окне свойству Name имя класса. Имя модуля класса является именем класса объектов.
  3. В разделе описания модуля объявите переменные уровня модуля, которые используются как «значения свойств».
  4. Инициализируйте класс при помощи процедуры Private Sub Class_Initialize. В этой процедуре надо указать значения, принимаемые по умолчанию переменными уровня модуля, описывающими «значения свойств».
  5. При помощи процедур Property Let объявите имена свойств, значениями которых являются числовые данные, а при помощи процедур Property set объявите имена свойств, значениями которых являются объекты. Если какое-то свойство — только для чтения, то для него не надо составить процедуру Property Let.
  6. При помощи процедур Property Get установите возможность считывания значения свойств.
  7. Создайте методы класса. Методы создаются при помощи обычных процедур и функций. Если метод возвращает число, то для его конструирования используется функция, а в остальных случаях — процедура.
  8. Допустимо также создание процедуры Private Sub Class_Terminate для удаления объекта из памяти по завершению работы с ним.
Читать еще:  Ошибка при сохранении файла excel

Процедуры Property Let, Property Set и Property Get

Процедура Property Let служит для объявления имен свойств, значениями которых являются числовые данные.

Процедура Property set служит для объявления имен свойств, значениями которых являются объекты.

Процедура Property Get обеспечивает возможность считывания значения свойств.

Как видно из приведенного ниже синтаксиса, процедуры Property Let, Property Set и Property Get имеют такую же структуру, что и обычные процедуры. Просто, они предназначены для специфических задач, описанных выше.

[Public | Private] [Static] Property Let имя [(списокАргументов)]

[инструкции] End Property

Public | Private] [Static] Property Set имя.[(списокАргументов)]

[инструкции] End Property

[Public | Private] [Static] Property Get имя [(списокАргументов)] [As тип]

[инструкции] [имя = выражение] [Exit Property]

[инструкции] [имя = выражение] End Property

Пример создания класса

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

Итак, в модуле класса, у которого установлено свойство Name, равное Вектор, наберите следующий код:

‘ X — координата абсциссы

‘ У — координата ординаты

Dim X, Y As Double

Public Property Get Абсцисса() As Double

‘ Возвращает значение свойства Абсцисса

Абсцисса = X End Property

Public Property Get Ордината () As Double

‘ Возвращает значение свойства Ордината

Public Property Let Абцисса(ByVal НоваяАбсцисса As Double)

‘ Устанавливает значение свойства Абсцисса

If Not IsNumeric(НоваяАбсцисса) Then

MsgBox «Абсцисса не является числом», vblnformation, «VBA»

Public Property Let Ордината(ByVal НоваяОрдината As Double)

‘ Устанавливает значение свойства Ордината

If Not IsNumeric(НоваяОрдината) Then

MsgBox «Ордината не является числом», vblnformation, «VBA»

Y = НоваяОрдината End Property

Public Property Get Длина() As Double

‘ Возвращает длину вектора. Это свойство только для чтения

Длина = Sqr(X ^ 2 + Y ^ 2)

Public Sub ПрибавитьВектор(ByVal ДругойВектор As Вектор)

‘ Покоординатное сложение двух векторов

X = X + ДругойВектор.Абсцисса Y = Y + ДругойВектор.Ордината

Public Sub УмножитьНаЧисло(ByVal Число As Double)

‘ Покоординатное умножение вектора на число

If Not IsNumeric(Число) Then

MsgBox «Число, на которое умножается вектор,» & Chr(13) & «на самом деле не число», vblnformation, «VBA»

X = Число * X Y = Число * У

Public Function СкалярноеПроизведение(ByVal ДругойВектор As Вектор)

‘ Скалярное произведение векторов

СкалярноеПроизведение = X * ДругойВектор.Абсцисса

Private Sub Class_Initialize()

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

Dim a, s As Double

‘ Объявление двух векторов

Dim МойВектор, ЕщеВектор As Вектор

Set МойВектор = New Вектор

‘ Установка координат вектора

.Абсцисса = 1 .Ордината = 1

‘ Определение длины вектора

‘ Умножение вектора на 2

Определение координат преобразованного вектора

‘ Создание еще одного вектора

Set ЕщеВектор = New Вектор

.Ордината = 3 End With

‘ Определение координат преобразованного вектора

‘ Определение скалярного произведения

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

Понять абсурдность этого понятия легче всего обратившись к истокам его возникновения. Рождено оно было Полем Дираком в 1930-х, когда стало ясно, что отрицание эфира в чистом виде, как это делал великий математик, но посредственный физик Анри Пуанкаре, уже нельзя. Слишком много фактов противоречит этому.

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

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

VBA Class

Excel VBA Class

VBA Class allows us to create our own Object function in which we can add any kind of features, details of the command line, type of function. When we create Class in VBA, they act like totally an independent object function but they all are connected together.

This helps us in building applications like which are already there in VBA and Excel. For example, the pedalling cycle wheel rotates. Pedals and Wheels both are the parts of Cycle, but both works independently to give the output as moving cycle.

How to Create Custom Class & Objects in VBA?

Let’s consider an example of 3 different companies’ mobile phones which are Apple, Samsung, and Nokia. Considering the popular and newly launched mobile phones of these companies which are iPhone X, Samsung S8, and Nokia 7+.

We will compare some of the important features for these mobile phones such as Brand, Model, Screen Size, Camera Type and Charger Type. These are basically important features on that basis we mostly compare any mobile phone. Below we have mapped the above-discussed parameters in a chart.

Now to create a Class in VBA first go to VBA. And from Insert menu, select the Class Module as shown below.

We will get the Class module window starting with Option Explicit as shown below.

Option Explicit ensures that variables must be declared before they are used. If we don’t declare any variable and use it, then the system will throw an error. Now in Class, define all the discussed parameters of measurement of mobile phones with Public. This will make those defined parameters open to using anytime, anywhere without any limitations.

Code:

Now we will add a different process of operating, features and functions of a mobile phone. Such as starting of a phone, Switching off the phone, playing music, charging the battery, etc. with Subcategory for each function as shown below. And add a message box in each Sub-category loop so that we will be able to see which methods are currently running.

Code:

This completes the creation of Class. Before we move further, it is advised to change the name of the Class Module. Choose any name as per your requirement as we change it to Mobile.

Now we will write a code in a module where we will see and compare the features and functions of each mobile phone brand. For this, we need to add a Module by going there under the Insert menu as shown menu.

We will get a new module opened with having Option Explicit enabled in this. As we are working and creating a class. Now start writing Subcategory in the name of performed functions as shown below.

Читать еще:  Как упорядочить числа в excel

We can change the name of the Module as also as we did for Class. This helps us keeping the co-related identity of the created VBA code. This can be done from properties windows as shown below.

We have already defined various features, functions, and methods of all brand mobile phones. Now let’s define 3 variables in any name (Preferably in the name of mobile phone brand) and assign it with Mobile. Let’s start with iPhone first as shown below.

Similarly, do the same for the rest of the mobile phone brand as shown below.

By this, we assign the created Class to each dimensional variable of Mobile brand. Now for each brand do the same process of assigning the Class.

Now we need to assign all the features of Mobile phone and its value. For this, use Set function and assign it a New Mobile as shown below.

Now open With-End loop for iPhone. This is where we will define each attribute of mobile.

As we can see, we have assigned all the defined features of the iPhone brand from Class with specific values as String.

Do the same thing for Samsung and Nokia brand as well.

Now we will use Debug.Print to print the information on the immediate window. It is useful where we want to see a certain variable in a line of code. We will select different features for each Mobile brand as shown below.

Now assign the MobileStarts and MobileOff functional operations which we defined in Class to each of mobile brand in the same module along with Message box. You may skip message box here.

This completes the assigning of Class to Module. Now compile the code and run using the F5 key. We will see the message of each mobile brand as shown below.

Now, if you want to know what variables and functions have what kind of values in it. For that open the Local window from view tab which will help us getting the details when we compile the code as shown below.

Below code is for your Reference.

Code:

  • We can build our own application with a lot of features.
  • Once Class is created, we can update any feature, anytime whenever we require.
  • If we update the code then also it won’t cause any problem in other parts of the Class.
  • We can test the individual part of the application as per our need.
  • Initially, it takes a lot of time to create a Class in VBA.
  • People who are new to VBA will find Class very difficult to apply.

Things to Remember

  • As the code can be huge and big, so it’s better to compile the code step-by-step. By doing this we would avoid N number of errors which will be difficult for us to debug and resolve.
  • We can ignore the use of Message Box if you are taking and testing above written code.
  • For testing, you can use lesser techniques or functions in creating Class. This can be modified later when we want to add more product functions and techniques.
  • Always consider similar or same features when we finish Class and assigning it to a Module. This will help us in comparing the features of different products.

Recommended Articles

This has been a guide to VBA Class. Here we discuss how to create custom class & objects in vba along with examples and downloadable excel templates. Below are some useful articles related to Excel VBA –

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
Присвоение переменным числовых значений:

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×