I have three templates and for using these templates I am making an add-in with a custom Ribbon Tab. What I would like, is as follows: When PowerPoint is opened, and the add-in is loaded, the user only sees three buttons on the custom Tab (= the three templates) which can be used to start a new presentation. When template A is choosen to make a new presentation, group 1 gets visible on the custom Ribbon Tab. When the presentation is closed, the group disappears. And this also for 2 and 3. They are never visible all together.
I think I’m almost there, but the Ribbon does not refresh when there is no presentation already open (empty PPT screen) and I start a new one (or open one) via my menu. Then my template-depended group does not appear in the Ribbon.
XML:
<customUI onLoad="RibbonOnLoad" …>
<group id="MyCustomGroup1" label="Name" getVisible="GetVisible" tag="MyPersonalGroup1"
And there I've added some custom buttons.
I also made "MyPersonalGroup2" and "MypersonalGroup3" like this.
VBA what I have now
Dim Rib As IRibbonUI
Dim MyTag As String
'Callback for customUI.onLoad
Sub RibbonOnLoad(ribbon As IRibbonUI)
Set Rib = ribbon
End Sub
Sub getVisible(control As IRibbonControl, ByRef returnedVal)
Select Case control.Tag
Case "MyPersonalGroup1"
returnedVal = ActiveWindow.Selection.SlideRange.Design.Name = ("TemplateA")
Case "MyPersonalGroup2"
returnedVal = ActiveWindow.Selection.SlideRange.Design.Name = ("TemplateB")
Case "MyPersonalGroup3"
returnedVal = ActiveWindow.Selection.SlideRange.Design.Name = ("TemplateC")
End Select
End Sub
Class module ApplicationEventClass:
Public WithEvents PPTEvent As Application
Private Sub PPTEvent_WindowSelectionChange(ByVal Sel As Selection)
MyTag = Tag
If Rib Is Nothing Then
MsgBox "Error, restart your presentation"
Else
Rib.Invalidate
End If
End Sub
I repeated this code for 'PPTEvent_AfterNewPresentation' 'PPTEvent_AfterPresentationOpen' 'PPTEvent_PresentationOpen' 'PPTEvent_PresentationClose' Is that necessary?
And this Module going with the code above:
Dim X As New ApplicationEventClass
Sub InitializePPTEvent()
Set X.PPTEvent = Application
End Sub
Many thanks for your help!
I posted this question about refresh with empty screen also on vbaexpress.com/forum/showthread.php?69782-PowerPoint-vba-Event-not-fired-when-screen-is-empty and https://learn.microsoft.com/en-us/answers/questions/796398/show-or-hide-custom-group-depending-on-powerpoint.html
You need a sub that returns the visibilitiy per each group based on the current design:
And you have to call
RefreshRibbon
within a WindowSelectionChange-Event. Did you implement a Application-class already? It's described here: https://learn.microsoft.com/en-us/office/vba/powerpoint/how-to/use-events-with-the-application-object