Дано: клиенты присылают заказы на закупку в Excel’е. Excel файлы у всех одинаковой структуры, только содержимое каждый раз разное. Как мне сделать так, чтобы я мог запускать выгрузку из этих файлов в формат, пригодный для импорта заказов на продажу в iScala?
Логичным видится создать макрос. Я так и сделал.
Но он будет доступен только в том файле, который я создал, а хотелось бы, чтобы он был доступен при открытии любого присланного файла с заказом и при этом не надо было бы открывать какой-то дополнительный файл. Для этого мы можем сохранить его в виде надстройки Excel (файл с расширением .xlam. По-русски звучит смешно 🙂 ):
Теперь нужно подключить сохранённую надстройку, для этого перейдите в параметры Excel — «Файл -> Параметры -> Надстройки»:
Внизу формы найдите «Управление», выберите «Надстройки Excel» и нажмите кнопку «Перейти». Появится форма «Надстройки». Нажмите «Обзор»:
Выберите нужный файл, который мы сохранили в качестве надстройки ранее:
Теперь надстройка доступна для использования. Но как нам её использовать? Точнее, не её, а требуемый нам макрос. Откроем файл, который нам присылает клиент. В нём макроса нет, он в надстройке. Попробуем просмотреть код макроса: с помощью комбинации клавиш Alt + F11
Да, при просмотре кода он доступен. А теперь посмотрим, список макросов, ведь пользователь не будет входить в просмотр кода, ему нужно каким-то образом вызвать макрос:
Вот это сюрприз! И что теперь делать?
Конечно, посмотреть, как это сделано у кого-нибудь другого 🙂 Хороший пример — добавление нашего макроса в меню Excel на закладку «Надстройки». Для этого в файле надстройки, которую мы создали раньше, необходимо добавить несколько строк кода, например, так:
Private Sub Workbook_Open() Dim MyNewMenu As CommandBarPopup ' Выпадающее пользовательское меню Dim cmdSubBarCtrl As CommandBarControl ' Пункт выпадающего меню Dim MenuExists As Boolean ' Флаг существования пользовательского меню Dim SubMenu As CommandBarPopup ' Выпадающее подменю Dim SubCmdCtrl As CommandBarControl ' Пункт выпадающего подменю Dim rcnt, ccnt, i, cel Set WorksheetsMenuBar = Application.CommandBars.ActiveMenuBar MenuExists = False For Each cmdBarCtrl In WorksheetsMenuBar.Controls If cmdBarCtrl.Caption = "SalesOrder" Then Application.CommandBars("worksheet menu bar").Controls("SalesOrder").Delete End If Next cmdBarCtrl MenuExists = True If Not MenuExists Then MsgBox ("ROOT is not found") End If Set MyNewMenu = WorksheetsMenuBar.Controls.Add(Type:=msoControlPopup, Temporary:=False) MyNewMenu.Caption = "SalesOrder" Set SubCmdCtrl = MyNewMenu.Controls.Add(Type:=msoControlButton, Temporary:=False) With SubCmdCtrl .FaceId = 3271 .Caption = "Export to TXT file" .OnAction = "Module1.To_TXT_File" End With End Sub
Не забудьте сохранить код, нажав на кнопку «Сохранить»! Перезагрузите Excel. Снова откройте присланный файл с заказом покупателя, перейдите на закладку «Надстройки»:
Макрос запускается!
А вот и наш файл: