Программно добавить макрос надстройки на панель быстрого доступа - PullRequest
2 голосов
/ 23 января 2020

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

Я планирую разместить надстройку в моей локальной папке надстроек. Сделайте там любые обновления и запустите процедуру, которая копирует надстройку в сетевое расположение и устанавливает ее только для чтения и скрыт. Все остальные пользователи не будут иметь надстройки на своей локальной машине. Поэтому при перезапуске Excel обновления вступят в силу.

Я создал «пустую рабочую книгу установщика», которая загрузит надстройку из сетевого расположения и убедится, что пользователь не копирует надстройку на свой локальный компьютер, предотвращение обновлений. Если возможно, я бы хотел, чтобы эта пустышка также добавила кнопку для надстройки на панель быстрого доступа, поэтому мне не нужно объяснять процесс пользователям, поскольку большинство из них не очень разбираются в технологиях. К сожалению, я не нашел способа сделать это, сохранив текущие настройки пользовательского интерфейса. Я полагаю, что большинство пользователей совсем не доработали свой пользовательский интерфейс, но я бы не стал отвечать за то, чтобы испортить чей-то пользовательский интерфейс.

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

Примечание:

Код CommonSizeAR находится в модуле 1 общего размера AR.xlam, а DeployAddIn находится в модуле 2 Workbook_Open хранится в «этой книге» "Common Size AR installer.xlsm

Private Sub deployAddIn()

Dim strAddinDevelopmentPath As String

Dim strAddinPublicPath As String 

    strAddinDevelopmentPath = "C:\AddIns" & Application.PathSeparator

    strAddinPublicPath = "W:\NetworkDrive" & Application.PathSeparator

    Application.DisplayAlerts = False

    With ThisWorkbook

        .Save

        On Error Resume Next

        SetAttr strAddinPublicPath & .Name, vbNormal

        On Error GoTo 0

        .SaveCopyAs Filename:=strAddinPublicPath & .Name

        SetAttr strAddinPublicPath & .Name, vbReadOnly + vbHidden

    End With

    Application.DisplayAlerts = True

End Sub

Private Sub workbook_open()

Dim Result As Integer

Result = MsgBox("Would you like to install the Common Size AR Add-in?", vbYesNo + vbQuestion, "Install?")

If Result = vbNo Then

Application.ThisWorkbook.Close SaveChanges:=False

Exit Sub

End If

On Error Resume Next

AddIns("Common Size AR").Installed = False

On Error GoTo ErrorHandler1

AddIns.Add Filename:="W:\NetworkDrive\Common Size AR.xlam", Copyfile:=False

AddIns("Common Size AR").Installed = True

MsgBox "Add-in Installed!", vbOKOnly + vbInformation, "Done!"

Application.ThisWorkbook.Close SaveChanges:=False

Exit Sub

ErrorHandler1:

MsgBox "Install Failed! Please let Developer know", vbOKOnly + vbCritical, "Error!"

Exit Sub 

End Sub
...