Создание пользовательской вкладки ленты Excel, которая работает в любой книге - PullRequest
1 голос
/ 24 января 2020

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

Я пишу кучу кода на VBA, который в основном создает новую рабочую таблицу в рабочей книге с определенными типами калькуляторов c (их много) для рабочих целей. Один лист - один тип калькулятора / анализа.

Что я хочу сделать sh, так это то, что из-за увеличения количества кода - я хотел бы поместить все на ленту, чтобы я мог получить доступ к макрос через это. Однако задание основано на анализе индивидуальных случаев, поэтому каждый новый проект требует создания новой книги Excel, в которой я могу выбрать нужный калькулятор и выполнить задание.

В дополнение к этому, он должен быть запущен на всех компьютерах с Excel в сети, с возможностью для меня иметь возможность изменять / добавлять код в макрос, так что все P C могут оставаться в курсе -дата одновременно.

Вкратце:

  • Существует множество макросов VBA (которые я постоянно обновляю / добавляю);
  • I необходимо получить доступ к этим макросам через ленту в любой новой книге (не один макрос находится) на нескольких компьютерах в сети;
  • Необходимо обеспечить мгновенное обновление кода для ленты и макроса пользователи.

ТАК, есть какое-то решение, например: я создаю 2 файла (один с конфигурацией ленты, другой с калькуляторами) и помещаю их в папку на сервере? Каждый пользователь обращается к ним один раз во время установки (в основном, находя папку, в которой находятся надстройки), и, если мне нужно что-то изменить, я делаю это с этими двумя файлами в папке сервера, и все.

Если нереально или довольно сложно (для непрограммиста) мгновенно обновить всех пользователей, ручное обновление может сработать, но минимум доступа к ленте в каждой новой книге является обязательным.

Заранее спасибо за помощь.

1 Ответ

1 голос
/ 31 января 2020

Спасибо всем вам, ребята, которые внесли свой вклад в вопрос. Хочу обобщить опыт и предоставить способ, которым мне удалось go.

1) Получите ваш код VBA

Давайте создадим такой код. Это может быть как угодно. Для этого откройте VBA на вкладке Developers или нажмите Alt+F11. Создайте новый модуль, щелкнув правой кнопкой мыши на VBAProject > Insert > Module, назовите его sayMsg в окне Properties и введите следующий код:

Sub saySomething()

    MsgBox "What's up?"

End Sub

Как я уже говорил выше - этот модуль может содержать все, обычно это функциональная часть вашего кода, которая будет вызвана в другом модуле позже.

Давайте создадим новый модуль так же, как мы создали первый и назовем его sayRibbon. Этот отдельный модуль содержит функцию вызова или так называемую «кнопку», которая запускает нашу подпрограмму из модуля sayMsg. Copy > Paste код ниже:

Private Sub sayButtons(Control As IRibbonControl)

    Select Case Control.ID

        Case Is = "saySomething_Btn"
            Call saySomething
        Case Else

    End Select

End Sub

По сути, здесь мы имеем Case с именем saySomething_Btn, который является самой «кнопкой» с определенной функцией вызова.

Теперь save это как файл надстройки Excel .xlam и close программы.

Примечание: при выборе .xlam в раскрывающемся меню вы будет автоматически находиться в папке Microsoft > AddIns по умолчанию. Чтобы сохранить его на Desktop, сначала выберите тип файла, а затем переместите папку.

2) XML map by Office RibbonX Editor

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

  • После завершения sh с установкой откройте файл OfficeRibbonXEditor.exe.
  • File > Open your .xlam файл. Теперь он появился в списке ниже.
  • Right click > Insert Office 2010+ CustomUI Part (или Insert Office 2007 CustomUI Part - зависит от используемой версии Office).
  • Copy > Paste код ниже:

Код

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" xmlns:Q="sayRibbon">
<ribbon startFromScratch="false">
<tabs>
<tab idQ = "Q:rxTabUI" label="Say Something" insertAfterMso="TabView">
<group idQ="Q:rxGrpUI" label="Say">
<button id="saySomething_Btn" label="Say Something" onAction="sayButtons" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
  • Нажмите Validate, в случае проблем - появится сообщение об ошибке (Отладка при необходимости, но вы не должны в это случай).
  • Теперь Save и Close Редактор ленты. Сохранить можно только в том случае, если Excel не открывает .xlam.

3) Доступ к надстройке .xlam в любой книге WorkBook

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

Это на самом деле не имеет значения - если вы хотите получить доступ только к вашей P C или локальной сети, процесс установки такой же.

  • Поместите файл .xlam в любое место по вашему выбору (локальная папка или сервер) .
  • Go до Excel > File > Options > Add-Ins.
  • Нажмите Go... кнопку ниже, Browse для .xlam местоположения и нажмите OK.
  • Убедитесь, что Надстройка отмечена в списке. Нажмите OK.

Уведомление : я бы порекомендовал encrypt your VBA по соображениям безопасности, на случай, если вы хотите быть тем, кто действительно может редактировать код - чтобы устранить любые проблемы, которые могут возникнуть, если код VBA не зашифрован.

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

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

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

...