Развертывание макросов в виде дополнительных модулей с настраиваемыми кнопками ленты для всего офиса - PullRequest
1 голос
/ 05 марта 2019

Я искал способ распространять макросы в моем техническом неграмотном офисе самым простым способом, который я могу.

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

Можно ли настроить таким образом настраиваемую вкладку ленты?

Пока что мне не удалось найти какие-либо руководства, и наша служба безопасности офиса также может заблокировать определенные пути.

Редактировать: используя отличное решение W-Hit и настраивая структуру папок, как указано,безусловно, помогает упростить развертывание обновления с помощью функции DeployAddIn.

Я также счел полезным поместить подпрограммы DeployAddIn и InstallAddin в собственную вкладку ленты!

Я столкнулся сОднако проблема с подпрограммой InstallAddin: как отформатировать текст XML в VBA, не сталкиваясь с ошибками синтаксиса.

Я обнаружил, что каждый элемент должен иметь mso в начале, например, <button> becomes <mso:button> и каждый «раздел, помеченный речью» встрока должна иметь "" двойные речевые метки ".

Возможно, самый простой способ использовать эту функцию установки - сохранить и отредактировать код в активном файле, а затем открыть C: \ Users [имя пользователя] \ AppData \Локальный \ Microsoft \ Office \ Excel.officeUI в Notepad ++. Затем просто выполните поиск и замену, чтобы добавить дополнительную квотуионные метки и вставьте его в раздел кода лентыXML = «вставьте свой текст здесь», убедившись, что он заключен в заключительные речевые метки, чтобы пометить весь раздел как текстовую строку.

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

1 Ответ

2 голосов
/ 06 марта 2019

В настоящее время я делаю это, и это довольно глубокий процесс настройки, но, как только он будет запущен, он будет работать плавно.

1-й шаг - создать структуру папок с тестовыми и рабочими копиями ваших файлов .xlam, для которых вы являетесь администратором.

2-й, в рабочей папке, щелкните правой кнопкой мыши все файлы .xlam и установите атрибуты в свойствах только для чтения. Если вы этого не сделаете, вы никогда не сможете обновить надстройку, если в ней есть кто-то еще.

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

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

Sub DeployAddIn()
'Author       : Ken Puls (www.excelguru.ca)
'Macro Purpose: To deploy finished/updated add-in to a network
'               location as a read only file

    Dim strAddinDevelopmentPath As String
    Dim strAddinPublicPath As String
    Dim FSO As New FileSystemObject

    'Set development path
    ChDrive "R:"
    ChDir "R:\addins\PROJECTS"
    strAddinDevelopmentPath = Application.GetOpenFilename()
    If strAddinDevelopmentPath = "False" Then
        Exit Sub
    ElseIf InStr(strAddinDevelopmentPath, "\PRODUCTION\") > 1 Then
        If MsgBox("You've Selected a Production File To Replace a Production File. Would You Like To Continue Anyway?", vbYesNo) = vbNo Then
            Exit Sub
        End If
    End If

    'Get Desitination path
    strAddinPublicPath = Replace(strAddinDevelopmentPath, "TESTING", "PRODUCTION")

    'Create dir if it doesn't exist
    On Error Resume Next
    MkDir Left(strAddinPublicPath, InStrRev(strAddinPublicPath, "\") - 1)
    On Error GoTo 0

    'Turn off alert regarding overwriting existing files
    Application.DisplayAlerts = False

    'overwrite existing file
    On Error Resume Next
    SetAttr strAddinPublicPath, vbNormal
    On Error GoTo 0
    FSO.CopyFile strAddinDevelopmentPath, strAddinPublicPath, True
    SetAttr strAddinPublicPath, vbReadOnly

    'Resume alerts
    Application.DisplayAlerts = True
End Sub

4-й, я также написал макрос для изменения пользовательской ленты. Приведенная ниже ссылка, кроме того, полезен сайт Рона де Брюина. https://grishagin.com/vba/2017/01/11/automatic-excel-addin-installation.html Код для автоматизации установки надстройки после получения нужного текста из файла officeUI

Sub InstallAddin()
    'Adapted from https://grishagin.com/vba/2017/01/11/automatic-excel-addin-installation.html
    Dim eai As Excel.AddIn
    Dim alreadyinstalled As Boolean
    Dim ribbonXML As String

    'check if already installed
    For Each eai In Application.AddIns
        If eai.Name = "Main addin.xlam" Then
            eai.Installed = False
            Exit For
        End If
    Next

    'add and install the addin
    Set eai = Application.AddIns.Add("path to Main addin.xlam", False)
    eai.Installed = True

    'append quick access ribbon xml to add button
    ClearCustRibbon
    LoadNewRibbon

    'have to close addin for it to load properly the first time
    Workbooks("Main addin.xlam").Close

End Sub

Sub ClearCustRibbon()
'https://social.msdn.microsoft.com/Forums/vstudio/en-US/abddbdc1-7a24-4664-a6ff-170d787baa5b/qat-changes-lost-when-using-xml-to-modify-ribbon-excel-2016-2016?forum=exceldev
Dim hFile As Long
Dim ribbonXMLString As String

hFile = FreeFile
OfficeUIFilePath = Environ("USERPROFILE") & "\AppData\Local\Microsoft\Office\Excel.officeUI"

ribbonXMLString = "<mso:customUI           xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">" & _
"<mso:ribbon>" & _
"<mso:qat>" & _
"<mso:sharedControls>" & _
"</mso:sharedControls>" & _
"</mso:qat>" & _
"</mso:ribbon>" & _
"</mso:customUI>"

Open OfficeUIFilePath For Output Access Write As hFile
Print #hFile, ribbonXMLString
Close hFile

End Sub

Sub LoadNewRibbon()
Dim hFile As Long

hFile = FreeFile
OfficeUIFilePath = Environ("USERPROFILE") & "\AppData\Local\Microsoft\Office\Excel.officeUI"

ribbonXML = "your ribbon text here"

Open OfficeUIFilePath For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile
End Sub

*** ВАЖНО ---- Если вы устанавливаете надстройку вручную, убедитесь, что вы выбрали нет при появлении запроса, если вы хотите, чтобы файл был сохранен на локальном компьютере. Если вы сохраните его на локальном компьютере, он создаст локальную копию и никогда не будет обновляться, если вы вносите изменения в сетевую копию или хотите исправить ошибку.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...