如果在VBA中存在特定工作表,如何禁用Excel中的function区button

我正在构build一个Excel加载项,允许用户与PowerPoint交互并导出数据。 用户可以通过function区中的button将模板插入到现有的工作簿中。 当他们点击这个button时,由于在一个工作簿中不能有两个模板,该button将被禁用。

用户然后可以保存他们的工作簿,并在稍后再回来。 我的问题是,我需要检测到他们有插入到现有的工作簿中的模板,我试图检测是否存在命名的范围(称为LoadedToken )。

我遇到的问题是function区的onLoad函数和VBA类Auto_Open在大型工作簿完全加载之前启动。 因此,我实际上并没有检测到模板是否存在,也不能真正禁用button。

有没有这样的事情在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 

注:authentication类只是另一个类连接到我的API。