Как отключить кнопку ленты в 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.