Как создать макрос в Excel и добавить его в меню надстроек?

Дано: клиенты присылают заказы на закупку в Excel’е. Excel файлы у всех одинаковой структуры, только содержимое каждый раз разное. Как мне сделать так, чтобы я мог запускать выгрузку из этих файлов в формат, пригодный для импорта заказов на продажу в iScala?

Дано: клиенты присылают заказы на закупку в Excel'е. Excel файлы у всех одинаковой структуры, только содержимое каждый раз разное. Как мне сделать так, чтобы я мог запускать выгрузку из этих файлов в формат, пригодный для импорта заказов на продажу в iScala?

Логичным видится создать макрос. Я так и сделал.

Логичным видится создать макрос. Я так и сделал.

Но он будет доступен только в том файле, который я создал, а хотелось бы, чтобы он был доступен при открытии любого присланного файла с заказом и при этом не надо было бы открывать какой-то дополнительный файл. Для этого мы можем сохранить его в виде надстройки Excel (файл с расширением .xlam. По-русски звучит смешно 🙂 ):

мы можем сохранить файл с макросом в виде надстройки Excel (файл с расширением .xlam. По-русски звучит смешно)

Теперь нужно подключить сохранённую надстройку, для этого перейдите в параметры Excel — «Файл -> Параметры -> Надстройки»:

Теперь нужно подключить сохранённую надстройку, для этого перейдите в параметры Excel - "Файл -> Параметры -> Надстройки"

Внизу формы найдите «Управление», выберите «Надстройки Excel» и нажмите кнопку «Перейти». Появится форма «Надстройки». Нажмите «Обзор»:

Внизу формы найдите "Управление", выберите "Надстройки Excel" и нажмите кнопку "Перейти"

Выберите нужный файл, который мы сохранили в качестве надстройки ранее:

Выберите нужный файл, который мы сохранили в качестве надстройки ранее

Теперь надстройка доступна для использования. Но как нам её использовать? Точнее, не её, а требуемый нам макрос. Откроем файл, который нам присылает клиент. В нём макроса нет, он в надстройке. Попробуем просмотреть код макроса: с помощью комбинации клавиш Alt + F11

Попробуем просмотреть код макроса: с помощью комбинации клавиш 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. Снова откройте присланный файл с заказом покупателя, перейдите на закладку «Надстройки»:

Снова откройте присланный файл с заказом покупателя, перейдите на закладку "Надстройки"

Макрос запускается!

Результат работы макроса

А вот и наш файл:

А вот и наш файл для импорта в iScala