Как сделать программный код для формы vba

Обновлено: 04.07.2024

Что же представляет из себя авторизация в Excel? Это форма, то есть окно, с запросом ввода логина и пароля, при успешном вводе которых, пользователю будут открываться различные листы документа, в зависимости от группы доступа пользователя. Точно также, помимо открытия листов, можно будет выставить ограничения на действия в Excel: запрет форматирования ячеек, удаление строк, столбцов, использование фильтров, объектов, сценариев и так далее. Но обо всем по порядку.

Авторизация в Excel: основной алгоритм работы

Для начала, необходимо разработать алгоритм, по которому мы будем работать, и выглядеть он будет примерно так:

Авторизация в Excel: макет документа

Наш рабочий документ будет состоять из четырех листов:

  1. Лист с приветствием — единственный лист, который будет отображаться всем пользователям до авторизации
  2. Лист с дашбордом (визуализированным отчетом) — графики, диаграммы/гистограммы — изначально со свойством VeryHidden*
  3. Лист с данными — источник расчетов для дашборда — изначально со свойством VeryHidden
  4. Служебный/технический лист — для хранения логинов, паролей и служебной и вспомогательной информации — также, со свойством VeryHidden
Авторизация в Excel: группы доступа

После создания макета документа, нам необходимо разработать несколько групп доступа и распределить и ограничить для них права. Предположим, что таких групп будет три:

  1. Администраторы (Admin): доступны все листы , в том числе служебный, а также отсутствуют какие-либо ограничения.
  2. Руководители и ответственные за данные (Head): доступны 2 рабочих листа + стоит пароль на изменение структуры книги.
  3. Рядовые сотрудники компании (Worker): доступен только 1 рабочий лист с дашбордом + стоит пароль на изменение структуры книги.
Авторизация в Excel: разработка макета формы

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

Если быстро набросать элементы, которые мы перечислили, должно получиться что-то вроде этого:

Авторизация на VBA: форма авторизации

После добавления элементов, поменял их стандартные названия:

Ничего лишнего, пока что все просто. Переходим далее.

Подготовка служебного листа

Итак, для начала, содержимое служебного листа будет выглядеть вот так:

Авторизация на VBA: служебный лист

Авторизация в Excel: особенности и написание программного кода на VBA

Данные пункты тесно взаимосвязаны между собой, поэтому я их объединил в один большой. Здесь мы будем писать программный код для всего нашего файла: как для формы, так и для некоторых событий.

Для начала, мы напишем код, который будет отображать различные листы в зависимости от роли пользователя после авторизации. Макрос user_group мы делаем приватным и вписывать его будем не в отдельный модуль, а в нашу готовую форму Authorization. Аргументом для макроса является переменная X, которая будет содержать название группы доступа в виде текстовой строки String:

Основной код написан, теперь переходим к более мелким.

Макрос для закрытия книги.

Авторизация на VBA: защита проекта


Теперь мы найдем место, куда будем заносить собственно программу. Для этого в верхнем ряду окна нажимаем кнопку “Вид”. В выпавшем меню первая строка и есть та, которая нам нужна: “Код”. Показано на рисунке 3.


У нас поверх окна формы Проект1 – Form1 (Форма) появится окно Проект1 – Form1 (Код). Вверху этого окна у нас имеется два выпадающих списка. Слева - список доступных объектов, справа – события для этих объектов. Объектов у нас сейчас два: (General) и Form. Выбираем строку Form. В поле окна кода появились две строки. Что это значит. Первая строка:

Private Sub Form_Load()

говорит о том, что мыначинаем подпрограмму (Private Sub) или правильней процедуру, которая будет выполняться при загрузке (_Load) нашей формы (Form). Загрузка - это возникающее событие, на которое и отреагирует эта процедура. Последняя строка

просто говорит о том, что этой строкой процедура Form_Load завершается.

Вот только выполнять-то пока нечего. В теле процедуры у нас нет ничего. А поэтому мы сейчас туда чего-нибудь напихаем. Первым делом, выведем на нашу форму какой-нибудь текст. По идиотской традиции, самая первая программа должна выводить на экран надпись типа “Hello, world” ("Здравствуй, мир"). Мы же, из чувства противоречия, напишем “Я стану программистом”. Для этого вписываем между двух уже имеющихся у нас строк еще одну. У нас получится вот такая процедура:

Private Sub Form_Load()

Form1 .Print "Я стану программистом"

Строка, которую мы только что вписали в процедуру, представляет собой оператор, в котором первое слово Form1 представляет собой объект с которым мы работаем (не даром Visual Basic - это объектно-ориентированный язык). В нашем случае объект - это форма. Второе слово после точки (Print) представляет собой метод, который мы используем, для того чтобы работать с нашим объектом (формой). Наш метод позволит напечатать на объекте данные, которые следуют далее. Так как строка "Я стану программистом" - текстовая, то она взята в кавычки. Таковы правила языка Visual Basic - то бишь синтаксис.

Теперь можно бы посмотреть как это работает, только ни черта у нас не выйдет. Чтобы эта надпись появилась в форме, надо залезть в окно “Свойства – Form1”. На рис. 2 (см. выше) оно подписано как “Свойства выделенного объекта”. Затем в левой колонке найти строчку со свойством “AutoRedraw”. В этой строке только в правой колонке из выпадающего списка выбрать “True”. Теперь окно перерисуется вместе с нашим чудесным текстом и мы сможем увидеть изменения формы после выполнения программой нашего оператора. Нажмем кнопочку со стрелочкой для запуска нашей программы (показано на рис.4) и наслаждаемся ее работой.


Свойство перерисовки, как и всякое другое можно задавать программно. Это намного правильней, так как в ходе выполнения программы часто приходится менять свойства объектов. Перед нашей строчкой добавим еще одну:

Form1.AutoRedraw = True

А в свойствах формы вернем состояние свойства AutoRedraw с True (Истина) на False (Ложь). Запустим программу. Она работает совершенно также. Аналогично можно менять другие свойства формы. В дальнейшем по мере необходимости мы будем обращаться к ним.

Ясное дело, форму можно растягивать. Можно также менять ее положение на экране, двигая квадратик в окне “Размещение формы”.

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

Только если после этого запустить программу, второй формы не увидишь. Чтобы сделать ее видимой, надо прописать в Form1 такой код:

Теперь наш проект надо сохранить. Выбери “Файл – Сохранить проект” или нажми на изображение дискетки. Появиться окно сохранения проекта, которое обычно предлагает путь "C:\Program Files\Microsoft Visual Studio\VB98". Но туда сохранять ни в коем случае не надо, иначе файлы твоего проекта перпутаются с файлами Visual Basic. Лучше создать отдельную папочку с названием, которое отражает суть проекта и сохранить проект в ней. Так надо поступать с каждым проектом. Мы будем сохранять файлы под теми же именами, которые предлагает VB, хотя их, конечно, можно задавать какие угодно.

Последний этап – создание выполняемого (т.е. EXE) файла, то ради чего мы это все делали. Нажми “Файл – Создать Проект1.exe…”, сохраняй и готово. Теперь ты можешь закрыть VB и запускать свой EXE-файл. Поздравляю! Ты создал первую программу на Visual Basic. Вариант этой программы, только несколько расширенный, я привожу ниже. В ней показано изменение некоторых свойств формы. Скопируй ее в тело подпрограммы и поэкспериментируй с ней. Обрати внимание на комментарии. Они выделяются зеленым цветом и пишутся после апострофа. Нужны они только для пояснений, не компилируются и программой не выполняются.

Иногда вам, возможно, придется собирать информацию повторно от других. Excel VBA предоставляет вам простой способ решения этой задачи — UserForm . Как и любая другая форма, которую вы заполняете, UserForm упрощает понимание того, какую информацию следует предоставлять. Пользовательская форма удобна для пользователя, так как предоставляемые элементы управления не требуют пояснений и сопровождаются дополнительными инструкциями, если это необходимо.

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

Создание пользовательской формы

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

  • Нажмите вкладку РАЗРАБОТЧИК на ленте.
  • Нажмите Visual Basic. Откроется окно Visual Basic для книги.
  • Нажмите Вставить,
  • Выберите UserForm из выпадающего списка.

Создание пользовательской формы

Пользовательская форма появляется в правой части окна.

Появляется пользовательская форма

Понимание пользовательской формы

Разверните окно UserForm.xlsx — UserForm1.

Понимание UserForm

  • Измените заголовок UserForm на Project Report — Daily в окне свойств.
  • Измените имя пользовательской формы на ProjectReport.

Отчет о проекте

Изменения отражаются в пользовательской форме, свойствах и проводнике проекта.

Элементы управления в панели инструментов

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

Excel предоставляет два типа элементов управления — элементы управления формы и элементы управления ActiveX. Вы должны понимать разницу между этими двумя типами элементов управления.

Элементы управления формой

Элементы управления формой — это оригинальные элементы управления Excel, которые совместимы с более ранними версиями Excel, начиная с Excel версии 5.0. Элементы управления формой также предназначены для использования на листах макроса XLM.

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

Элементы управления ActiveX

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

У вас есть следующие элементы управления ActiveX в UserForm ToolBox —

  • Указатель
  • этикетка
  • Текстовое окно
  • Поле со списком
  • ListBox
  • CheckBox
  • OptionButton
  • Рамка
  • Кнопка-переключатель
  • CommandButton
  • TabStrip
  • MultiPage
  • Полоса прокрутки
  • в полях ввода
  • Образ

В следующих нескольких разделах вы поймете эти элементы управления и MsgBox. Затем вы сможете выбрать, какой из этих элементов управления требуется для разработки пользовательской формы.

этикетка

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

этикетка

Текстовое окно

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

Текстовое окно

Список

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

  • Вставьте ListBox в пользовательскую форму.
  • Нажмите на список.
  • Введите ProjectCodes для Name в окне свойств ListBox.

Есть три типа списков —

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

Список выбора множественного выбора — Список списка множественного выбора включает либо один выбор, либо смежные (смежные) варианты.

Поле со списком расширенного выбора — Поле со списком расширенного выбора позволяет выбрать один, непрерывный и несмежный (или несвязанный) выбор.

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

Список выбора множественного выбора — Список списка множественного выбора включает либо один выбор, либо смежные (смежные) варианты.

Поле со списком расширенного выбора — Поле со списком расширенного выбора позволяет выбрать один, непрерывный и несмежный (или несвязанный) выбор.

Вы можете выбрать один из этих типов списков в окне свойств.

ListBox

  • Щелкните правой кнопкой мыши на пользовательской форме.
  • Выберите View Code из выпадающего списка. Откроется окно кода UserForm.
  • Нажмите Инициализировать в правом верхнем углу окна кода.
  • Введите следующее в Private Sub UserForm_Initialize ().

инициализировать

Выберите Run

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

Поле со списком

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

Довольно часто при создании макросов может понадобиться придать им некой “динамичности”. Как и рядовые приложения, редактор VBA предоставляет объект UserForm, который отвечает за создание формы.

userform vba - класс для работы с формой

По своей природе, объект vba UserForm представляет из себя пустое диалоговое окно, на поверхность которого можно добавить различные элементы управления (кнопки, списки и так далее). В отличии от тех объектов, с которыми мы работали в сценариях сервера Windows Script Host, объекты VBA помимо свойств и методом, обладают еще и событиями, кроме этого, объекты класса UserForm vba содержат в себе модуль класса, который может хранить собственные методы и свойства, или код для обработки событий.

Что бы добавить новую форму к vba проекту, воспользуйтесь меню Insert , пункт UserForm . Обратите внимание: в окне Проектов есть папка Forms, в которой хранятся все формы, добавленные в проект, имя для формы назначается автоматически, например, UserForm1, UserForm2,…,UserFormN. Если вы случайно закроете окно формы, то его можно вновь запустить, выбрав нужную форму в окне Проектов. Можете также прочитать предыдущую стать "Знакомство с редактором VBA"

Некоторые свойства класса UserForm vba языка

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

BackColor – содержит цвет фона.

BorderColor – цвет рамки

BorderStyle – стиль рамки, принимает только два возможных значения.

Caption – свойство определяет заголовок формы, фактически, это то т же заголовок окна программы. По умолчанию, данное свойство содержит то же значение, что и свойство Name.

Enabled – принимает логическое True или False, и определяет, доступна ли форма. Если значение свойства ровно False, то ни один из элементов управления не доступен.

ShowModal – как и предыдущее свойство, ShowModal может принимать логические значения. True – по умолчанию, “модальный” режим, пока не будет закрыта текущая форма, другая форма или возврат в документ будут недоступны.

Font – определяет шрифт.

ForeColor – определяет цвет переднего плана формы, например, цвет текста.

Некоторые методы класса UserForm vba языка

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

Repaint – позволяет перерисовать отображаемую форму.

Show – метод противоположен методу Hide, он делает форму видимой, если она еще не загружена в память, то происходит ее загрузка.

И так, что бы не томить душу, давайте создадим простую форму, назовем ее “Первая программа” (свойство Caption), у меня имя формы UserForm1. Хорошо, теперь нам нужно написать макрос, при запуске которого будет выводиться форма. Для этого добавляем в проект новый модуль и в окне кода пишем следующее:

Sub Module1() UserForm1.Show End Sub

Тут Module1 – имя процедуры, оно совпадает с именем модуля, оно хранится в свойстве Name. Sub … End Sub – это блок процедуры. UserForm1.Show – тут мы вызываем метод Show объекта UserForm1 для отображения формы, помните, UserForm1 – имя моей формы, его тоже можно изменить.

Все, теперь если запустить текущий макрос, то пользователю просто выведется пустая форма. Можете поэкспериментировать с ее свойствами.

Некоторые события класса UserForm vba языка

Редактор кода для userform vba и модуля

Activate – событие возникает каждый раз, когда окно формы становится активным.

Click – происходит клик мышью по поверхности, не занятой элементами управления.

DblClick – аналог предыдущему событию, только тут происходит двойной клик по форме.

Deactivate – событие возникает каждый раз, как окно формы переходит в неактивное состояние.

Initialize – возникает как только происходит загрузка формы в память с помощью метода Show или оператора Load.

Resize – происходит изменение размеров формы

Terminate – событие происходит каждый раз, как только форма выгружается из памяти.

Помним, что для вызова метода или события, сперва идет имя объекта, а потом, после точки, имя метода или свойства. С событиями все по-другому: нам нужно создать процедуру и присвоить ей имя в стиле “Объект_Событие”, то есть, сначала мы пишем имя объекта (например, UserForm1), потом идет символ подчеркивания и имя события.

Ладно, откройте редактор формы и дважды щелкнете по полю формы, вас сразу перенаправит в редактор кода, где содержатся следующие строки:

Private Sub UserForm_Click() End Sub

Видим, что данная процедура рассчитана для события Click, давайте в ней пропишем:

MsgBox "Вы кликнули по форме. "

Обратите внимание, что у вас в проекте есть форма и два редактора кода, один содержит строки:

Sub Module1() UserForm1.Show End Sub

Это фактически и есть наш макрос, он отображается в окне проекта. Что бы получить доступ к редактору кода для самой формы, выберите в редакторе vba, в окне Проекта нужную форму и нажмите на крайнюю левую кнопку вверху (View Code), или просто выберите аналогичный пункт в меню View. Также, обратите внимание, что теперь вы можете выбрать нужное событие в окне кода для данной формы, список находится вверху справа.

Ладно, на этом пока все, тут мы рассмотрели класс языка vba UserForm, впереди нас ждет еще много материала, поэтому, я не хочу сразу впихивать все подробности в одну статью.

Спасибо за внимание. Автор блога Владимир Баталий

Читайте также: