Excel vba макрос форма ввода данных заполнение таблицы

Обновлено: 13.05.2024

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

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

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

Напомню, что на данном сайте тема VBA Excel уже затрагивалась, например, в материале – Запрет доступа к листу Excel с помощью пароля

И так приступим!

Пишем макрос на VBA Excel по формированию документов

Реализовывать нашу задачу будем на примере «Электронной карточке сотрудника» (я это просто придумал:), хотя может такие и на самом деле есть), т.е. документ в котором хранится личные данные сотрудника вашего предприятия, в определенном виде, именно в Excel.

Примечание! Программировать будем в Excel 2010.

И для начала приведем исходные данные, т.е. сами данные и шаблон

Данные.

Скриншот 1

Лист, на котором расположены эти данные так и назовем «Данные»

Шаблон.

Скриншот 2

Лист, на котором расположен шаблон, тоже так и назовем «Шаблон»

Далее, нам необходимо присвоить имена полей для вставки, так более удобней к ним обращаться чем, например, по номеру ячейки.

Это делается очень просто, выделяете необходимую ячейку или диапазон, и жмете правой кнопкой мыши и выбираете «Присвоить имя», пишите имя ячейки и жмете «ОК»

Скриншот 3

Свои поля я назвал следующим образом:

Код макроса на VBA Excel

Для того чтобы написать код макроса, открывайте на ленте вкладку «Разработчик», далее макросы.

Примечание! По умолчанию данной вкладке в Excel 2010 может и не быть, чтобы ее отобразить нажмите правой кнопкой по ленте пункт меню «Настройка ленты»

Скриншот 4

затем, в правой области поставьте галочку напротив пункта «Разработчик»

Скриншот 5

После вкладка разработчик станет отображаться на ленте.

Далее, когда Вы откроете вкладку разработчик и нажмете кнопку «Макросы» у Вас отобразится окно создания макроса, Вы пишите название макросы и жмете «создать».

Скриншот 6

После у Вас откроется окно редактора кода, где собственно мы и будем писать свой код VBA. Ниже представлен код, я его как обычно подробно прокомментировал:

Теперь осталось выполнить этот макрос, для этого откройте вкладку разработчик->макросы->выполнить наш макрос:

Скриншот 7

и после выполнения у Вас в той же папке появится вот такие файлы

Скриншот 8

Вот с таким содержимым:

Скриншот 9

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

Всем нам приходится - кому реже, кому чаще - повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую "рутинную составляющую" - одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.

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

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

Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно - редактор программ на VBA, встроенный в Microsoft Excel.

macro1.jpg

  • В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис - Макрос - Редактор Visual Basic(Toos - Macro - Visual Basic Editor).
  • В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer) . Выбираем Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer) . Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic(Visual Basic Editor)

    :

К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:

macro2.jpg

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

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

macro3.jpg

macro4.jpg

macro5.jpg

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

macro6.jpg

Давайте разберем приведенный выше в качестве примера макрос Zamena:

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

Способ 2. Запись макросов макрорекордером

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

  • Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу - запись останавливается.
  • Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
  • Если во время записи макроса макрорекордером вы ошиблись - ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) - во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.

Чтобы включить запись необходимо:

  • в Excel 2003 и старше - выбрать в меню Сервис - Макрос - Начать запись(Tools - Macro - Record New Macro)
  • в Excel 2007 и новее - нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)

Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:

macro7.jpg

  • Имя макроса - подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
  • Сочетание клавиш - будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис - Макрос - Макросы - Выполнить(Tools - Macro - Macros - Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
  • Сохранить в. - здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
    • Эта книга - макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
    • Новая книга - макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
    • Личная книга макросов - это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.

    После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording) .

    Запуск и редактирование макросов

    Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или - в старых версиях Excel - через меню Сервис - Макрос - Макросы (Tools - Macro - Macros) :

    macro8.jpg

    • Любой выделенный в списке макрос можно запустить кнопкой Выполнить(Run) .
    • Кнопка Параметры(Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
    • Кнопка Изменить(Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.

    Создание кнопки для запуска макросов

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

    Кнопка на панели инструментов в Excel 2003 и старше

    Откройте меню Сервис - Настройка (Tools - Customize) и перейдите на вкладку Команды (Commands) . В категории Макросы легко найти веселый желтый "колобок" - Настраиваемую кнопку (Custom button) :

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

    Кнопка на панели быстрого доступа в Excel 2007 и новее

    Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar) :

    macro11.jpg

    Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:

    macro12.jpg

    Кнопка на листе

    Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:

    • В Excel 2003 и старше - откройте панель инструментов Формы через меню Вид - Панели инструментов - Формы (View - Toolbars - Forms)
    • В Excel 2007 и новее - откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer)

    Выберите объект Кнопка (Button) :

    macro13.jpg

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

    Создание пользовательских функций на VBA

    Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция - только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).

    Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert - Module и введем туда текст нашей функции:

    macro14.jpg

    Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка - Функция) в категории Определенные пользователем (User Defined) :

    macro15.jpg

    После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:

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

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

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

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

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

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

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

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

    Вы находитесь в режиме дизайна сейчас. Вы можете вставить элементы управления в пользовательскую форму и написать код для соответствующих действий. Элементы управления доступны в панели инструментов. Свойства UserForm находятся в окне свойств. UserForm1 (подпись UserForm) указывается в разделе «Формы» в проводнике проектов.

    Понимание UserForm

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

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

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

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

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

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

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

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

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

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

    этикетка

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

    этикетка

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

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

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

    Список

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

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

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

    ListBox

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

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

    • Перейдите на вкладку «Выполнить» на ленте.
    • Выберите Run Sub / UserForm из выпадающего списка.

    Выберите Run

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

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

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

    Пакет Microsoft Office (и Google-таблицы) дает возможность автоматизации взаимодействия оператора с ЭВМ.

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

    Разработать приложение, позволяющее заполнять таблицу Регистрации туристов

    • Фамилия
    • Имя
    • пол
    • Выбранный тур
    • оплачено
    • фото
    • паспорт
    • срок

    Разработать приложение, позволяющее заполнять таблицу Регистрации туристов


    Рис.1 Разработать приложение, позволяющее заполнять таблицу Регистрации туристов

    Если Вы предложите что-то свое (доработки, усовершенствования) и меня это заинтересует (как вариант), то скоро увидите его на этом месте…

    Всплывающие подсказки на органах управления формы vba

    Практически все органы управления имеют свойство ControlTipText, которому можно присвоить текстовое значение. Это помогает пользователю ориентироваться на форме…

    Всплывающие подсказки на органах управления формы vba


    Рис.2 Всплывающие подсказки на органах управления формы vba

    У командных кнопок это свойство установлено. Приглядитесь…

    Создание заголовков полей базы данных на Листе Excel

    Так было рекомендовано в методическом пособии, но я этот шаг пропустил…

    //------------------------------
    Sub ЗаголовокРабочегоЛиста()
    'Процедура создания заголовков полей базы данных
    If Range(«A1»).Value = «Фамилия» Then Range(«A2»).Select Exit Sub 'Если заголовки существуют, то досрочный выход из процедуры
    End If 'Если заголовки не существуют, то создаются заголовки полей
    ActiveSheet.Сеlls.Clear
    Range(«A1:H1»).Value = Array(«Фамилия», «Имя», «Пол», «Выбранный Тур», «Оплачено», «Фото», «Паспорт», «Срок»)
    Range(«А: А»).ColumnWidth = 12
    Range(«D: D»).ColumnWidth = 14.4
    Range(«2:2»).Select
    'Закрепляется первая строка с тем, чтобы она всегда отображалась на экране
    ActiveWindow.FreezePanes = True
    Range(«A2»).Select
    'К каждому заголовку поля базы данных присоединяется примечание
    Range(«Al»).AddComment
    Range(«A1»).Comment.Visible = False
    Range(«A1»).Comment.Text Text:="Фамилия клиента"
    Range(«B1»).AddComment
    Range(«B1»).Comment.Visible = False
    Range(«B1»).Comment.Text Техt:="Имя клиента"
    Range(«C1»).AddComment
    Range(«C1»).Comment.Visible = False
    Range(«C1»).Comment.Text Text:="Пол клиента"
    Range(«D1»).AddComment
    Range(«D1»).Comment.Visible = False
    Range(«D1»).Comment.Text Text:="Направление" & Chr(lO) & «выбранного тура»
    Range(«E1»).AddComment
    Range(«E1»).Comment.Visible = False
    Range(«E1»).Comment.Text Text:="Путевка оплачена?" & Chr(lO) & «(Да/Нет)»
    Range(«F1»).AddComment
    Range(«F1»).Comment.Visible = False
    Range(«F1»).Comment.Text Text:="Фото сданы" & Chr(lO) & «(Да/Нет)»
    Range(«G1»).AddComment
    Range(«G1»).Comment.Visible = False
    Range(«G1»).Comment.Text Text:="Наличие паспорта" & Chr(lO) & "(Да/Нет)»
    Range(«H1»).AddComment
    Range(«H1»).Comment.Visible = False
    Range(«H1»).Comment.Text Text:="Продолжительность" & Chr(lO) & «поездки»
    End Sub
    //------------------------------

    Заполнение раскрывающихся списков ComboBox

    Обратите внимание на колонку "AE" строки 1-7…

    ComboBox1.RowSource = "=AE2:AE7" 'Заполняет раскрывающийся список из диапазона
    //------------------------------

    Исходный код UserForm VBA Excel

    Почти весь исходный код расположен в модуле формы UserForm1.

    А в модуле Лист1 расположены только короткие процедуры "Вызова формы", "Очистки таблицы" и "Запрета выделения ячеек в таблице".

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

    Если на этой странице не нашлось того, что Вы так искали.


    Не попадайтесь на удочку мошенников-кидал.

    Valid HTML 5 Strict

    460040, г.Оренбург ©2010 Учебные программы и сайты для студентов

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