Как отключить кнопку ленты в Excel, если конкретный рабочий лист существует с VBA

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

Затем пользователь может сохранить свою книгу и вернуться к ней позже. Моя проблема в том, что мне нужно обнаружить, что у них есть шаблон, вставленный в существующую книгу, и я делаю это, пытаясь определить, существует ли именованный диапазон (называемый LoadedToken ).

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

Есть ли такая вещь, как события в Excel, которые могут быть вызваны на уровне рабочей таблицы (например, worksheet_open ), но обнаружены в классе?

Мой код:

 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' When the Ribbon loads ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub OnRibbonLoad(ribbonUI As IRibbonUI) Set MyRibbonUI = ribbonUI Dim Authenticate As New AuthenticationClass On Error Resume Next ' Enable/Disable buttons based on authentication status If Authenticate.Authentify = False Then Authenticated = False Debug.Print ("Unauthorized!") Else Authenticated = True Debug.Print ("Authorized!") End If ' If the template doesn't exist then disable a grouping on the ribbon If TemplateExists = False Then Call RefreshRibbon(Tag:="Grouping1") Else Call RefreshRibbon(Tag:="Grouping2") End If End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Check if the Template sheet is visible and prevent other buttons from working ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function TemplateExists() Dim Helpers As New HelpersClass If Helpers.IsNamedRange("LoadedToken") Then TemplateExists = True Else TemplateExists = False End If End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' From the Helpers Class - Check if a named range exists ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function IsNamedRange(RName As String) As Boolean Dim N As name IsNamedRange = False For Each N In ActiveWorkbook.Names If N.name = RName Then IsNamedRange = True Exit For End If Next End Function 

Примечание. Класс аутентификации – это еще один класс для подключения к моему API.

Interesting Posts

= IF (ISNUMBER (ПОИСК … разница между 1 и 11

Массив Excel VBA из данных

Как получить кодировку файла Excel в C #? он всегда возвращает «Windows 1252»

Pandas читает файл excel с простым индексом многоколоночных

CSV: как включить двухбайтовые символы

Open XML Reading Excel файл не вводит цикл для чтения листа excel

Excel VLOOKUP не работает

Объединение двух таблиц с использованием сценария и создание языка HTML

Преобразование ТЕКСТА, представляющее значение НЕГАТИВНОГО ВРЕМЕНИ, к числу или времени для добавления (Excel)

Пользовательская форма и модуль VBA присоединяются к каждому открытому элементу Excel

Excel выделяет исключение HRESULT: 0x800A03EC, пока пользователь все еще вводит значение ячейки и ячейки

Нужна помощь в понимании неквалифицированных диапазонов

Копировать диапазон и вставить в другой диапазон на основе пользовательского ввода

Более элегантный способ замены текста и форматирования его

Autofilter защищенный лист excel, открытый от доступа

Давайте будем гением компьютера.