Страницы: 1
RSS
Модернизация ленты, Изменение содержимого ленты
 
Здравствуйте, Уважаемые!
Всем мира и благополучия!

Может кто-нибудь подскажет правильный синтаксис XML элемента структуры файла формата .xlsm, содержащий параметры пользовательской настройки ленты, который при загрузке этого файла  определенные содержащиеся в нем команды (макросы) помещал в  конкретную пользовательскую вкладку при ее наличии?
Или иными словами хочется добиться вот какого результата.
Предположим, создана и подключена к приложению Excel надстройка.
При загрузке приложения надстройка отображается отдельной вкладкой на ленте.
Для упрощения задачи моделируем, что приложение Excel уже загружено, а следовательно, подключена и надстройка.
Теперь рассматриваем загрузку через приложение файла, содержащего какие-то макросы.
Создать и оформить для нужной группы команд этого файла  отдельную вкладку на ленте, отображающую пользователю возможность их использования, проблем не вызывает.
А вот как дать компу инструкции средствами XML кода или иными способами, чтобы эти макросы, объединенные в группу, были помещены именно во вкладку, созданной надстройкой?
Причем проверить, подключена ли надстройка к приложению при загрузке файла, также проблем не вызывает.
Вызывает вопрос именно обращения к этой вкладке, когда идентифицировано, что она есть в наличии на ленте.
 
Есть бесплатная программа Ribbon XML Editor - поюзайте
http://novikov.gq/products/ribbonxmleditor/ribbonxmleditor.html
 
Да, я в курсе об этой программе, и именно ее и использую.
Более того, я связался с разработчиком и поинтересовался у него.
Однако он ответил, что всего лишь создал продукт, упрощающий ручной труд, а сам в языке XML не силен.
В моем вопросе, как я понимаю, нужен именно специалист по XML, ибо я сам об этом языке знаю весьма поверхностно, несмотря на то, что он очень похож на html
Изменено: Владимир Баукин - 03.05.2021 21:43:14
 
Цитата
Владимир Баукин написал:
В моем вопросе, как я понимаю, нужен именно специалист по XML
в вашем вопросе нужен пример - потому как не понятно что именно не получается
да и колбэки пишутся не в xml, а на vba

до кучи кросс
Изменено: buchlotnik - 03.05.2021 22:12:32
Соблюдение правил форума не освобождает от модераторского произвола
 
Доброе время суток
Цитата
Владимир Баукин написал:
помещал в  конкретную пользовательскую вкладку при ее наличии?
Пожалуйста, детализируйте, что это такое - конкретная пользовательская вкладка?
Цитата
Владимир Баукин написал:
Создать и оформить для нужной группы команд этого файла  отдельную вкладку на ленте,
VBA не может создать вкладку - только управлять видимостью уже существующей определённой в customUI.xml вкладки. Если хотите иметь динамическое создание вкладки, её групп, элементов управления, то это уже VSTO. Там, да - это можно делать непосредственно в коде, как ранее было в VBA для Command Bars.
 
Я понимаю, что VBA не создает ничего в ленте, я понимаю, что это на уровне XML кода.
Хорошо, пойдем последовательно.
Итак, создана и подключена надстройка, файл которой называется "Форматирование сеток.xlam".
В структуре файла в customUI прописан конкретный код:
Код
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
   <ribbon startFromScratch="false">
      <tabs>
         <tab id="TabAirTable" label="Сетки вещания" insertBeforeMso="TabInsert">
            <group id="GroupEdit" label="Редактирование">
               <button id="btnFormating" label="Форматировать" imageMso="AccessListCustom" onAction="RunFormatingAirTables" />
            </group>
         </tab>
      </tabs>
   </ribbon>
</customUI>
Надстройка прекрасно подгружается и в результате в загруженном приложении Excel появляется вкладка с названием "Сетки вещания"
Теперь я загружаю через приложение файл формата .xlsm.
Если тупо прописать в его структурном файле customUI аналогичный вышеуказанному код, поменяв лишь название иконки и обращение к макросу, то  в результате я увижу на ленте две одноименных вкладки с разными иконками вызовами:
Код
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
   <ribbon startFromScratch="false">
      <tabs>
         <tab id="TabAirTable" label="Сетки вещания" insertBeforeMso="TabInsert">
            <group id="UpdateBase" label="База данных">
               <button id="RunUpd"
                  imageMso="AdpOutputOperationsTableRemove"
                  size="large"
                  label="Обновить"
                  onAction="RunUpdate" />
            </group>
         </tab>
      </tabs>
   </ribbon>
</customUI>
Безусловно, я не забыл прописать в основном модуле файла обращение к ленте
Код
Sub RunUpdate(control As IRibbonControl)
    CreateBaseDataAirProgram
End Sub
Но если я в структурном файле customUI своего .xlsm укажу вот такой код, то ничего не сработает - этой вкладки приложение Excel не видит по ID:
Код
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
   <ribbon startFromScratch="false">
      <tabs>
         <tab id="TabAirTable">
            <group id="UpdateBase" label="База данных">
               <button id="cndUpd"
                  label="Обновить"
                  size="normal"
                  onAction="UpdateBaseData"
                  imageMso="AdpOutputOperationsTableRemove" />
            </group>
         </tab>
      </tabs>
   </ribbon>
</customUI>
При этом, я сперва при загрузке файла проверяю, установлена ли интересующая меня надстройка кодом:
Код
Option Explicit

Private WithEvents AppXL As Application

Private Const ADDIN_OTR As String = "Форматирование сеток.xlam"

Private Sub Workbook_Open()
    Dim CurAddIn As AddIn
    Set AppXL = Application
    
    For Each CurAddIn In Application.AddIns
        If CurAddIn.Name = ADDIN_OTR Then
            'и вот в этом месте загвоздка
            Exit For
        End If
    Next
End Sub
Вот как мне именно в этом месте, где загвоздка, дать инструкции программе, что нужно именно во вкладку с ID TabAirTable, созданной этой надстройкой, поместить свою группу команд, либо, если надстройка не установлена, то применить тот пользовательский интерфейс, который изначально прописан в customUI этого файла?
Обращение по idMso также не срабатывает
Изменено: Владимир Баукин - 04.05.2021 01:40:46
 
Доброго времени
Владимир Баукин Вы решили провести эксперимент с Excel. Как он отреагирует на одинаковые ID вкладок на ленте (<tab id="TabAirTable">). Я думаю, что они должны быть уникальные. А в этой строке (<ribbon startFromScratch="false">) можно оставить только ribbon. Полностью она нужна со значением True, чтобы не загружать стандартные вкладки Excel. Но это мои предположения, я еще только учусь.
 
Снова приветствую!
Все просмотревшим, а также принявшим участие в обсуждении, спасибо, что потратили свое драгоценное время и уделили внимание теме.
В результате детального погружения в изучение матчасти удалось решить обозначенную задачу.
Все оказалось даже проще, чем я первоначально думал.
Если кому-то это сможет однажды быть полезным, выкладываю решение, суть которого заключается в определение пользовательского пространства имен.
Это пространство имен прописывается в структурных файлах customui  созданной надстройки и во всех файлах формата .xlsm, используемые команды которых тематически подходят для размещения на  вкладе, созданной подключенной надстройкой.
Выглядят эти одинаковые обращения к созданному пространству имен в выше обозначенных файлах следующим примерным образом:
Код
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"
          xmlns:NmSpcAT="http://customui.myfuturesite.ru">
      <ribbon startFromScratch="false">
            <tabs>
                  <tab idQ="NmSpcAT:TabAirTable" label="Сетки вещания" insertBeforeMso="TabInsert">
                        ...(прописываются нужные пользователю группы, кнопки внутри этих групп с их атрибутами)
                  </tab>
            </tabs>
      </ribbon>
</customUI>

И дальше без разницы, подключена ли надстройка или нет, при загрузке нужного нам файла .xlsm всегда перед стандартной вкладкой "Вставка" появится вкладка "Сетки вещания" с группой команд, прописанной в его структурном файле customui.
Ну, а если надстройка подключена, которая также при загрузке приложения Excel создает эту вкладку "Сетки вещания", то при загрузке оговариваемого файла .xlsm прописанная в его структурном файле customui группа команд  поместится в уже созданную надстройкой одноименную вкладку.

На этом тему можно считать закрытой.
Всем еще раз спасибо за внимание.
Изменено: Владимир Баукин - 08.05.2021 22:38:05
 
крос продолжается
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
крос  продолжается
Привет, Михаил. С праздником!
Ну, Владимир с решением отписался в обоих случаях. Так что остаётся только поблагодарить - большое спасибо!
 
Цитата
Андрей VG написал:
с решением отписался в обоих случаях
А должен был и там и там кросc объявить :)
По вопросам из тем форума, личку не читаю.
 
Ведмедь не с той лапы встал?
 
Цитата
RAN написал:
не с той лапы
лапы не трожь . :-)  а вот то что тезка ранее на кросс указа - я и правда пропустил.
Изменено: БМВ - 09.05.2021 09:40:30
По вопросам из тем форума, личку не читаю.
 
Спасибо автору и от меня!
Владимир
Страницы: 1
Наверх