Оглавление

Оглавление. 2

Перечень рисунков. 2

Описание работы макроса. 4

Описание языка VBA.. 6

Настройка приложения Excel для запуска VBA: 8

Написание первого макроса. 10

Процедура, выполняемая сразу после открытия Excel. 11

Создание формы. 13

Добавление кнопок на форму. 14

Привязка процедуры к кнопке. 17

Кнопка вызова макроса на листе. 17

Форма с полями ввода и закрытие диалогового окна. 19

Форма с полями ввода. 19

Закрытие диалогового окна. 21

Вывод переменной в MsgBox. 22

Инициализация формы пользователя данными. 23

Работа с ячейками Excel 23

Что такое переменная и как правильно её объявить?. 25

Variable not defined или что такое option explicit и зачем оно нужно?. 25

Определение последней ячейки на листе средствами VBA.. 25

Запись данных из формы на лист. 26

Программирование Word из Excel посредством VBA. 26

Открытие приложения Word средствами VBA.. 27

Использование закладок в пакете Word. 29

Макрос, запускающий Word из Excel и открывающий новый документ. 29

Макрос для передачи данных из Excel в Word. 30

Форматирование текста в документе Word. 31

Разрывы.. 36

Таблицы. 36

Работа с книгами Excel. 37

Чтение и запись ячеек. 37

Запись информации в ячейку. 37

Очистка значения ячейки. 37

Номер последней заполненной строки. 37

Перечень рисунков

Рис. 1. Настройка ленты Excel. 8

Рис. 2. Включение вкладки Разработчик. 8

Рис. 3. Вкладка разработчик на ленте приложения. 9

Рис. 4. Сохранение документа с поддержкой макросов. 9

Рис. 5. Запуск редактора Visual Basic. 9

Рис. 6. Добавление модуля в файл Excel. 10

Рис. 7. Окно свойств модуля. 10

Рис. 8. Окно свойств модуля. 11

Рис. 9. Код текущей книги Excel. 12

Рис. 10. Действие Open для объекта Workbook. 12

Рис. 11. Добавление формы. 13

Рис. 12. Заполнение граф Caption и Name. 13

Рис. 13. Вызов окна Toolbox. 14

Рис. 14. Ввод надписи внутрь формы. 14

Рис. 15. Добавление кнопки на форму. 15

Рис. 16. Добавление надписи на кнопку. 15

Рис. 17. Вид активной формы, перед проверкой работы. 16

Рис. 18. Просмотр кода кнопки «Создать» формы ВыборДействия. 16

Рис. 19. Просмотр кода книги Excel. 17

Рис. 20. Размещаем макрос в модуле Информация. 18

Рис. 21. Вставка кнопки формы на лист Excel. 18

Рис. 22. Окно назначения объекту макроса. 19

Рис. 23. Вид редактируемой кнопки. 19

Рис. 24. Вид готовой кнопки. 19

Рис. 25. Вставка поля ввода. 20

Рис. 26. Форма ввода параметров заказа. 21

Рис. 27. Просмотр кода формы. 22

Рис. 27. Открытие формы ВыборДействия. 23

Рис. 18. Подсказка при вводе данных. 24

Рис. 19. Окно MsgBox с сообщением. 24

Рис. 25. WriteHello появилось в окне. 26

Рис. 25. Окно включения подсказок. 29

Рис. 26. Включение подсказок для Word. 29

Рис. 24. Настройка полей текста в документе. 34

Рис. 25. Поля страницы. 35

Рис. 26. Настройка нижнего колонтитула. 35

Рис. 27. Цвет и ширина рамки. 36

Рис. 28 Параметры рамки основной надписи. 36

Рис. 286. Приложение А 1. 37

Рис. 287. Приложение А 2. 38

 


 

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

Имеется файл Excel "Сводная таблица по заказам". Нужно написать для удобства работы макрос. Макрос выполняет следующую работу:

Открываешь книгу (файл) Excel, сразу же появляется (ссылка) окно (ссылка) со свойствами Caption = "Выбор действия"; Текст в окне = "Запись нужно: "; 3 кнопки с надписями: "Посмотреть"; "Исправить"; "Создать". Кнопки расположены следующим образом: кнопка "Посмотреть" слева, кнопка "Исправить" посередине, кнопка "Создать" справа. Исходя из следующих соображений: смотреть имеющиеся записи приходится чаще; править имеющиеся записи реже чем смотреть, но чаще чем создавать новые заказы. Также поэтому после открытия документа и появления окна "Выбор действия" кнопка "Смотреть запись" должна быть активной, готовой быть нажатой по клавише Enter.

Каждая из кнопок запускает свою ветвь алгоритма (ссылка). На листе должна быть кнопка вызова начального окна (ссылка).

Рассмотрим сначала третью ветку алгоритма, как наиболее сложную.

3)           Ветка алгоритма "Создать запись"

3.1)        После нажатия кнопки, которая отправляет в ветку алгоритма "Создать запись"

3.1.1)     Макрос открывает новое окно Caption = "Новый заказ"; Текст в окне = "Введите данные нового заказа", с такими полями ввода сверху вниз 1) №п.п; 2) Номер заказа; 3) Наименование аппарата; 4) Обозначение аппарата; 5) Обозначение стойки автоматического управления (САУ); 6) Обозначение Машины сортировочной (МС). Макрос закрывает окно "Выбор действия" (Ссылка).

Следующие поля спорные, уточнять с заказчиком, наличие и вид: 7) Год изготовления; 8) Дата составления схемы; 9) Список изменений; 10) Дополнительные корректировки в схеме; 11) Проблемы при изготовлении; 12) Ссылка на схему аппарата; 13) Ссылка на PDF аппарата; 14) Ссылка на перечень *ЭЯб1*; 15) Ссылка на схему *ЭЯб3*; 16) Ссылка PDF *ЭЯб3*; 17) Ссылка на перечень *ЭЯб3*; 18) Ссылка на И1; 19) Ссылка на перечень ЭД; 20) Ссылка на РЭ; 21) Примечание.

3.2.1)     Поле №1. Название поля: "№ п.п.". Макрос инициализирует это поле сразу после открытия окна (ссылка) следующим образом: если в столбце А есть записи (работа с ячейками), то в следующую за последней заполненной строкой столбца А (ссылка) макрос записывает следующий номер по порядку, затем делает активным следующее поле окна "Добавить новый аппарат".

3.2.2)     Макрос анализирует столбец А, если записей нет, в ячейку А2 вписывает текущий год, в ячейку А3 надпись "№ п.п.", в ячейки B-V: 2) Номер заказа; 3) Наименование аппарата; 4) Обозначение аппарата; 5) Обозначение стойка автоматического управления (САУ); 6) Обозначение Машины сортировочной; 7) Год изготовления; 8) Дата составления схемы; 9) Список изменений; 10) Дополнительные корректировки в схеме; 11) Проблемы при изготовлении; 12) Ссылка на схему аппарата; 13) Ссылка на PDF аппарата; 14) Ссылка на перечень *ЭЯб1*; 15) Ссылка на схему *ЭЯб3*; 16) Ссылка PDF *ЭЯб3*; 17) Ссылка на перечень *ЭЯб3*; 18) Ссылка на И1; 19) Ссылка на перечень ЭД; 20) Ссылка на РЭ; 21) Примечание. Форматирует границы ячеек "все границы – сплошная линия"; в ячейку А4 макрос заносит цифру 1.

3.3.1)     Поле №2. Название поля: "Введите номер заказа. Если номера нет, нажмите Tab". При наведении мышки на это поле появляется всплывающая подсказка "Если заказ неизвестен, то нажмите Tab".

3.3.2)     (!TAB || Enter)? : в это поле введён номер заказа, макрос проверяет, что в этом поле только цифры и вписывает эти цифры в столбец B для этого № п.п.

3.3.2.1)  Проверять данные на ошибку?

3.3.2) TAB? : заказ неизвестен, макрос смотрит, есть ли в столбце В записи вида "без_заказа№".

3.3.2.1)  Если нет записей без_заказаN, то макрос создаёт в столбце В запись без_заказа1.

3.3.2.2)  Если есть запись вида "без_заказаN", то макрос создаёт в столбце В запись без_заказаN+1.

3.3.3)     Предусмотреть возможность сменить идентификатор без_заказаN на номер заказа, когда заказ будет известен.

3.3.4)     Предусмотреть возможность ввести несколько заказов, например: заказы 1014, 1015, 1016.

3.3.5)     Сделать проверку, что вводимый заказ не совпадает с другим заказом.

3.3.6)     Макрос сохраняет номер заказа в столбце «В» на строке нового заказа

3.4)        Макрос делает активным следующее поле окна "Новый заказ"

3.4.1)     Поле №3 Название поля: "Введите наименование аппарата" - макрос вписывает это в ячейку D (строка № заказа).

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

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

3.4.2)     Макрос смотрит на диске S:/Богураев/Заказы 2019/ (сделать, чтобы место хранения файлов настраивалось и где-то запоминалось, какой аппарат где хранится) есть ли папка с названием:

"наименование_аппарата_з.номер_заказа_з.номер_заказа_.з.номер_заказа...".

Предусмотреть устранение конфликтов для имён папок, если имена совпадают.

Если заказ не определён, то создавать папку наименование_аппарата_без_заказа1, наименование_аппарата_без_заказа2 и т.д.

3.4.3) Если такой папки нет, то макрос создаёт папку (заказы текущего года или как-то надо узнавать какой год для какого аппарата?)

Макрос генерирует (или может быть копирует blank файлы-заготовки и переименовывает) файлы Word:

"Список изменений", "Список дополнительных корректировок", "Список проблем";

файлы "обозначение_изделия ПЭ4", "обозначение машины сортировочной ПЭ4" с рамкой по ГОСТ и заполненными надписями с наим. изд. и обознач. МС

В графы, соответственно, J, K, L, O, R вписываются названиями файлов с гиперссылками на эти файлы.

3.5)        Поле №4. Название: "Введите обозначение аппарата" - макрос вписывает это в ячейку E (строка № заказа).

3.6)        Поле №5. Название: "Введите обозначение стойки автоматического управления (САУ)" - макрос вписывает это в ячейку F (строка № заказа).

3.7)        Поле №6. Название: "Введите обозначение машины сортировочной (МС)" - макрос вписывает это в ячейку G (строка № заказа).

Для п. 3.5-3.7 должна быть возможность, чтобы из списка, то есть нужна какая-то подсказка, чтобы аппарат, МС, САУ брались из списка и показывались при заполнении. Макрос должен как-то проверить соответствие сочетания аппарат – стойка - машина сортировочная (МС) из списка, чтобы не взять к аппарату не ту стойку и не ту МС (напр. количество трубок не то или ещё что-либо).

3х1) Нужно ещё чтобы макрос спрашивал номера исходных схем, искал их на диске и копировал схему аппарата и МС и перечни элементов.

3х2) После того, как исходные файлы: схема аппарата, схема МС, перечень элементов аппарата, перечень элементов МС скопированы, макрос даёт этим файлам новые номера.

3х3) из п.1 в ПЭ в основной штамп и в боковой штамп вписываются наименование и обозначение аппарата и в ПЭ на единицу вписываются составляющие: САУ МС и пульт управления (ПУ, который везде одинаковый) также в окошке должна быть галочка изменить перечень элементов, чтобы можно было внести ИБП или другие элементы или исключить пульт.

3х4) также должны автоматически создаваться гиперссылки на созданные файлы в соответствующих ячейках сводной таблицы.

 

1) Ветка "Посмотреть?" – форма должна спросить по какому параметру искать: номер заказа, номер схемы, наименование аппарата, при этом аппараты бывают одинаковые, а заказы разные. Должен быть выпадающий список, содержимое списка зависит от введённого параметра (нельзя на номер заказа выбрать другой аппарат, на известный аппарат нельзя взять другую схему и т.п.)

2) Ветка "Подправить?" – что-то похожее на «посмотреть». Ещё не проработано.

 

4) Ещё было бы неплохо, чтобы после завершения правок (просмотров) можно было отправить на печать перечни элементов и схемы.

5!) Должна быть функция проверки наличия файлов-подлинников для Екатерины.

Файлы должны находиться на диске S/ORCAD/год выпуска/Перечни и S/ORCAD/год выпуска/Схемы для перечней и схем соответственно. Макрос проверяет, есть ли такие файлы в указанном выше месте. Если таких файлов нет, то макрос должен предложить скопировать файлы из моей папки на диске S/Богураев.

 

Описание языка VBA

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

Процедура – это наименьшая единица программного кода, на которую можно ссылаться по имени. Это также наименьшая единица программного кода, которая может выполняться независимо. VBA распознает два главных типа процедур - Sub и Function. Любая процедура содержит один или несколько операторов, помещенных между двумя специальными операторами – объявлением процедуры в начале и оператором завершения процедуры (End Sub или End Function) в конце.

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

Пример процедуры типа Function:

Public Function ДеФункция(х As Integer, y As Integer)

Dim Z as Integer

z = x + у

ДеФункция = x^z

End Function

Очевидно, строение процедуры типа Function очень похоже на строение процедуры типа Sub. Объявление начинается с необязательного ключевою слова, определяющего область видимости процедуры (в данном случае это Public). Далее идет ключевое слово Function, определяющее тип процедуры, за ним размещается имя процедуры и аргументы. Подобно процедуре типа Sub, в конце процедуры типа Function находится завершающий оператор End Function.

Процедуру типа Function можно выполнить, только вызвав ее из другой процедуры. Как правило, это делается путем присваивания имени данной функции некоторой переменной. В следующем примере переменная ZСтепень получает значение, возвращенное процедурой ДеФункция:

ZСтепень = ДеФункция(3, 4)

 

Модуль – это именованная единица, состоящая из одной или нескольких процедур, а также объявлений, относящихся ко всем процедурам в модуле. Хотя VBA и допускает размещение всех процедур в одном модуле, имеет смысл разместить процедуры в нескольких модулях в соответствии с выполняемыми этими процедурами задачами, чтобы с ними было проще работать.

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

Проект состоит изо всех модулей, форм и связанных с приложением объектов, относящихся к некоторому документу, вместе с самим документом.

Чтобы вставить в программный код несколько строк комментария, напечатайте текст комментария, как будто это происходит в обычном текстовом процессоре, игнорируя все сообщения редактора Visual Basic об ошибках, появляющиеся на экране каждый раз. когда вы будете нажимать клавишу <Enter> для перехода на новую строку. Закончив печатать, выделите весь блок текста, которому предназначено стать комментарием, и щелкните на кнопке Comment Block (Добавить в блоке знаки комментария). Редактор Visual Basic добавит необходимый апостроф в начало каждой строки в выделенном блоке.

Объявляем переменную, затем последнюю заполненную строку. Заносим текст в ячейки А и В строки, следующей за последней.

    Dim lLastRow As Long

    'Определяем последнюю заполненную строку по столбцу A.

    lLastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row + 1

    'Заносим данные в ячейки А и В сразу за последней строкой

    ActiveSheet.Cells(lLastRow, "A").Value = "Ячейка за последней"

    ActiveSheet.Cells(lLastRow, "B").Value = "№ заказа"


 

Настройка приложения Excel для запуска VBA:

Настроим ленту приложения, для этого выбираем файл – параметры:

Рис. 1. Настройка ленты Excel.

В появившемся окне выбираем настройки ленты и ставим галочку в чекбоксе разработчик и нажимаем ОК.

Рис. 2. Включение вкладки Разработчик.

В ленте появляется вкладка разработчик

Рис. 3. Вкладка разработчик на ленте приложения.

Сохраняем документ как документ с поддержкой макросов

Рис. 4. Сохранение документа с поддержкой макросов.

Переходим во вкладку разработчик, нажимаем кнопку Visual Basic. Другой вариант нажать Alt + F11

Рис. 5. Запуск редактора Visual Basic.


 

Написание первого макроса.

После настройки Excel (см. предыдущую главу) запускаем программу Visual Basic, появляется окно редактора. Подводим мышку к строке «Эта книга», щёлкаем правой кнопкой мышки, выбираем Insert module.

Рис. 6. Добавление модуля в файл Excel.

Добавим окно управления свойствами модулей

Рис. 7. Окно свойств модуля.

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

Рис. 8. Окно свойств модуля.

В нашем новом модуле Информация напишем первый макрос, который ищет последнюю заполненную строку в столбце №1. Разберёмся как работать с макросами. Для выполнения макроса надо нажать на кнопку F5. Чтобы выполнить макрос пошагово, надо нажимать F8. Наберём такой текст и посмотрим как работает такой макрос.

Sub LastRowShow()

    Dim ImLastRow As Long

    Dim МоеСообщение As String

    'Определение последней заполненной строки через свойство End:

    ImLastRow = Cells(Rows.Count, 1).End(xlUp).Row

    МоеСообщение = "Последняя строка № "

    MsgBox МоеСообщение + Str(ImLastRow), vbOKOnky, "№ последней строки"

    'Окно MsgBox закрывают нажатием на кнопку ОК.

End Sub

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

Процедура, выполняемая сразу после открытия Excel.

Чтобы сразу после открытия файла (книги Excel) запускалась процедура, нужно открыть редактор VBA, правой кнопкой мыши щёлкнуть на «ЭтаКнига», в выпадающем меню выбрать View Code (рис. 9).

Рис. 9. Код текущей книги Excel.

В появившемся окне из выпадающего списка наверху слева выбираем объект Workbook, справа в выпадающего списка возможных действий появляется Open.

Рис. 10. Действие Open для объекта Workbook.

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

Private Sub Workbook_Open()

 

End Sub

Добавим несколько строк:

Option Explicit

Private Sub Workbook_Open()

LastRowShow

End Sub

Строка Option Explicit нужна для настройки опций компиляции, чтобы типы переменных нужно было указывать явно, для исключения путаницы. Строка

LastRowShow

Вызывает пользовательскую нашу процедуру LastRowShow. Таким образом при открытии файла каждый раз будет запускаться процедура поиска последней занятой строки в столбце А активного листа открытой Excel книги.

Создание формы.

Открываем редактор VBA, нажимаем правой кнопкой по надписи ЭтаКнига выпадает меню. Выбираем Insert UserForm (рис. 11). Появится окно формы. Для изменения текста внутри формы нужно перейти к окну свойств. В окне свойств нужно щёлкнуть мышкой на строке Caption – текст, написанный в правой части строки будет отображаться в поле Title в форме (текст в верхний части окна). Вместо Label1 напишем Выбор действия. Для читаемости кода, который сгенерирует VB для этой формы, исправим поле Name на понятное значение, например ВыборДействия (пробелы не допускаются). По этому названию будет вызываться форма: то есть показываться окно (рис. 12).

Рис. 11. Добавление формы.

Рис. 12. Заполнение граф Caption и Name.

Для добавления надписи внутрь формы вызовем окно Toolbox, выбрав Veiw – Toolbox (рис. 13). В окне Toolbox надо нажать левой кнопкой мыши на кнопку «A» и выделить область, в которой будет помещаться надпись (рис. 14). Затем нужно один раз щёлкнуть левой кнопкой мыши на области и набрать нужный текст. Пусть текст будет таким: «Запись нужно: ». После того, как текст набран, можно изменять размеры области с текстом перемещая контуры объектов за «кантик».

Рис. 13. Вызов окна Toolbox.

Рис. 14. Ввод надписи внутрь формы.

Добавление кнопок на форму

Добавим кнопки на форму (в окно). Для этого в окне Toolbox нужно нажать левой кнопкой мыши на (выбрать) Command Button (рис. 15). Затем мышкой наметить область кнопки. Сделаем 3 кнопки, каждая будет запускать свою ветвь алгоритма. Добавим на кнопки надписи: "Посмотреть"; "Исправить"; "Создать". Для этого нужно выбрать изображение будущей кнопки. Вокруг выбранной кнопки появится «кантик», за который можно перемещать кнопку и изменять форму кнопки. В окне свойств изменим текст в правой части строк Caption и Name (рис. 16). Текст в строке Caption будет отображаться на кнопке, текст в строке Name – название кнопки, по этому названию программа будет опознавать кнопку. Поле TabIndex задаёт порядок перехода по элементам формы клавиатурными кнопками Tab, Shift+Tab.

Аналогично отредактируем остальные кнопки. После этого подправим размер окна, надписи и кнопок, перемещая контуры объектов за «кантик».

Рис. 15. Добавление кнопки на форму.

Рис. 16. Добавление надписи на кнопку.

Табл. 1. Атрибуты кнопок.

Атрибуты кнопок

Графа в Properties

 

 

 

Надпись на кнопке

Caption

Посмотреть

Исправить

Создать

Название

Name

ViewButton

ReductButton

CreateButton

Порядок перехода по Tab

TabIndex

1

2

3

Проверим работу формы. Для этого нужно сделать активной форму, щёлкнув левой кнопкой мыши на строке ВыборДействия в окне Project. Если форма активна (рис. 17), нажать F5. В результате работы программы появится окно с кнопками. Нажатие на кнопки не вызовет никакой реакции. Закрывается окно стандартным способом: красным крестиком в правом верхнем углу.

Рис. 17. Вид активной формы, перед проверкой работы.

Просмотрим код кнопки формы (окна) ВыборДействия. Для этого щёлкнем правой кнопкой мыши на кнопке, например «Создать», вокруг кнопки должны появиться маркеры изменения размера – кнопка стала активной для редактирования, выберем View Code (рис. 18).

Рис. 18. Просмотр кода кнопки «Создать» формы ВыборДействия.

В появившемся окне с кодом будет такой фрагмент текста:

Private Sub CreateButton_Click()

 

End Sub

Процедура Sub обрабатывает для кнопки «Создать» событие «кнопка нажата» Ключевое слово _Click() обозначает «по нажатию». Ключевое слово _Click() добавляется к названию кнопки, которое мы задали в графе (Name): CreateButton. Надпись на кнопке CreateButton мы задаём в графе Caption – «Создать». Таким образом кнопка «Создать» будет видна программе под названием CreateButton.

В тексте это выглядит как CreateButton_Click(), то есть после нажатия кнопки с Name = CreateButton выполнятся команды, которые должны помещаться между надписями Sub и End Sub. Эти команды VBA выполнит после нажатия кнопки CreateButton.

Привязка процедуры к кнопке.

Если кнопка активна для редактирования, то вызвать окно просмотра программного кода можно любым из следующих способов: выбрать View - Code из меню; нажать <F7>; Щелкнуть на форме правой кнопкой мыши и в появившемся контекстном меню выбрать View Code. Если в текст процедуры CreateButton_Click() добавить строку:

Private Sub CreateButton_Click()

    Unload Me

End Sub

то после нажатия кнопки «Создать» окно (форма) ВыборДействия закроется. Если теперь нажать на кнопку F5 и посмотреть работу окна, то после нажатия на кнопку «Создать» форма будет закрываться; при нажатии на остальные кнопки ничего не будет происходить, так как их процедуры пустые. В последующем на каждую кнопку будет «привязана» своя ветвь алгоритма. Сделаем так, чтобы сразу же после открытия книги Excel открывалась форма ВыборДействия. Нажимаем правой кнопкой по надписи ЭтаКнига выпадает меню, в котором выбираем View Code. (рис. 19).

Рис. 19. Просмотр кода книги Excel.

Для того, чтобы созданная форма открывалась сразу же после открытия книги Excel нужно в процедуре Workbook_Open заменить строку.

LastRowShow

На строку

ВыборДействия.Show

Чтобы получился такой код:

Private Sub Workbook_Open()

ВыборДействия.Show

End Sub

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

Кнопка вызова макроса на листе

Для начала напишем макрос в модуле Информация. Этот макрос будет запускать наша кнопка. Макрос размещаем в папке Modules в тексте модуля Информация, для чего щёлкаем правой кнопкой мыши на модуле Информация и в появившемся меню выбираем View Code (рис. 20).

Рис. 20. Размещаем макрос в модуле Информация.

Допустим, макрос, запускает форму ВыборДействия. Назовём макрос FirstWindow()

Sub FirstWindow()

ВыборДействия.Show

End Sub

Ключевое слово Show, помещённое после имени формы через точку, даёт команду на вывод указанной формы на экран компьютера.

На вкладке Разработчик выбираем вставить «Кнопка (элемент управления формы)» рас. 20.

Рис. 21. Вставка кнопки формы на лист Excel.

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

Рис. 22. Окно назначения объекту макроса.

Кнопка будет доступна для редактирования. В этом режиме можно изменить текст внутри кнопки (рис. 22).

Рис. 23. Вид редактируемой кнопки.

После редактирования кнопки исчезают 8 квадратиков по периметру изображения, появляется полутень (рис. 23).

Рис. 24. Вид готовой кнопки.

Теперь макрос запускается после того, как нажмёшь кнопку.

Форма с полями ввода и закрытие диалогового окна.

Форма с полями ввода.

Создадим форму с полями ввода. Для этого щёлкнем правой кнопкой мыши по папке Forms. В появившемся меню выберем Insert->UserForm. Затем добавим надпись на форме «Введите данные нового заказа», нажав в окошке Toolbox на кнопку с буквой А (кнопка Label) и разместив поле с надписью в нужном месте. В правой части таблицы Properties в графе Caption запишем Новый заказ. В графе (Name) запишем без пробелов НовыйЗаказ.

Для вставки полей ввода надо в окошке Toolbox нажать кнопку TextBox и разместить поле ввода на форме (рис. 25).

Рис. 25. Вставка поля ввода.

После этого добавим подпись поля ввода, нажав в окошке Toolbox на кнопку с буквой А. Подправим поле ввода и надпись над ним чтобы они смотрелись красиво. Теперь выделим поле ввода и обратим внимание на таблицу в окне Properties. Параметр Left определяет отступ поля ввода от левого края формы, параметр Height определяет высоту поля ввода, параметр Width отвечает за ширину поля ввода. Зажав на клавиатуре клавишу Ctrl выделим поле ввода и надпись над ним, щёлкнув по этим двум элементам левой кнопкой мыши. Возле них должен появиться кантик. Теперь нажмём на клавиатуре Ctrl+C, скопировав элементы. Теперь разместим копию элементов на форме нажав Ctrl+V пять раз – так мы получили шесть полей ввода. После этого поля ввода можно подравнять: выделим, зажав на клавиатуре Ctrl, левой кнопкой мыши все поля ввода. После чего в окне Properties изменим параметр Left на 30. После этого все выделенные элементы установятся на одинаковом расстоянии от левого края формы. Аналогично можно выровнять высоту элемента установив параметр Heigth = 30 и Width = 230. Чтобы расположить по вертикали поля ввода с одинаковыми расстояниями нужно выделять поля ввода по одному и настраивать параметр Top, добиваясь равномерного распределения полей ввода по форме. Можно установить параметр Top, например: 50, 100, 150, 200, 250, 300. Если выделить все поля ввода и установить параметр Top равным нулю, то все объекты перекроют друг друга и установятся под верхней кромкой формы.

Выровняем текстовые надписи аналогичным образом. Выделим все шесть надписей. Установим в окне Properties параметр Left на 30. Снимем выделение, щёлкнув левой кнопкой мыши на любом месте формы. Выделяя элементы по одному установим параметр Top, например: 30, 80, 130, 180, 230, 280. Изменим подписи полей ввода на: № по порядку; Номер заказа; Наименование аппарата; Обозначение аппарата; Обозначение стойки автоматического управления (САУ); Обозначение Машины сортировочной (МС). Выделяя каждое поле и помещая соответствующие надписи в окне Properties в графе Caption. Если необходимо, поля надписи можно перетаскивать и менять размеры, перетаскивая мышкой кантик.

Также добавим две кнопки управления: Ввод данных и Отмена. Для этого в окне Toolbox нужно нажать левой кнопкой мыши на Command Button (рис. 14). Затем мышкой наметить область кнопки.

Добавим на кнопки надписи: «Ввод данных» и «Отмена». Для этого нужно выбрать изображение будущей кнопки. Вокруг выбранной кнопки появится «кантик», за который можно перемещать кнопку и изменять форму кнопки. В окне свойств Properties изменим текст в правой части строк Caption и Name (рис. 15). Текст в строке Caption будет отображаться на кнопке, текст в строке Name – название кнопки, по этому названию программа будет опознавать кнопку. Назовём кнопку Ввести данные – OrderButton; кнопку Отмена – CancelButton. Набрав эти названия в графе (Name) в окне свойств Properties, для соответствующих объектов.

Выровняем высоту и ширину кнопок, выделив обе кнопки и изменив в окне свойств Properties параметры Top = 350; Heigth = 30; Wigth = 100. После этого снимем выделение с кнопок и зададим для каждой параметр Left = 30 и 160, соответственно.

Поле TabIndex задаёт порядок перехода по элементам формы клавиатурными кнопками Tab, Shift+Tab. Проверим порядок переключения и подправим, если необходимо.

Зная ширину поля ввода и отступ от левого края (230 и 30, соответственно), установим ширину формы равной 30+230+30. Для этого выделим форму, щёлкнув на ней левой кнопкой мыши, и в окне свойств Properties параметр Wigth установим = 290.

Для названий полей ввода установим левый отступ равным 30, выделив все названия полей ввода и установив в окне свойств Properties параметр Left = 30. Если в окне свойств Properties сделать запись в параметре ControlTipText, то этот текст будет появляться как всплывающая подсказка при наведении на поле ввода.

В итоге получаем форму для ввода параметров заказа как на рис. 26.

Рис. 26. Форма ввода параметров заказа.

Инициализация формы данными.

Чтобы форма НовыйЗаказ загружалась с некоторой начальной информацией нужно правой кнопкой мыши щёлкнуть на форме НовыйЗаказ в папке Forms в окне Project и в появившемся меню выбрать View Code (рис. 27). В появившемся окне выбрать сверху в левом выпадающем списке UserForm (рис. 28), затем в правом выпадающем списке выбрать Initialize (рис. 29). В окне появится код, который будет заполнять (инициализировать) форму при открывании формы. Уберём лишний текст, оставив только код связанный с инициализацией.

Рис. 27. Просмотр кода формы.

Рис. 28. Выбор UserForm в выпадающем списке окна кода формы.

Рис. 29. Выбор Initialize в выпадающем списке окна действий с формой.

Добавим свой код:

Private Sub UserForm_Initialize()

    Dim ImLastRow As Long

    'Определить послед. заполн. строку через свойство End:

    ImLastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ImLastRow = ImLastRow + 1

TextBox1.Value = ImLastRow

End Sub

В результате после открытия формы в поле ввода № по порядку (TextBox1) будет появляться значение последней заполненной строки в столбце А, увеличенное на единицу.

Чтобы активным стало поле ввода Номер заказа (TextBox2) изменим поля TabIndex

Таблица 2. Порядок активирования элементов управления

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

поле (Name) в окне Properties

TabIndex

TextBox2

0

TextBox3

1

TextBox4

2

TextBox5

3

TextBox6

4

OrderButton

5

CancelButton

6

TextBox1

7