Risolto. Grazie a tutti per l'aiuto . Ho sbattuto x oltre una settimana su non so quanti siti e quanto codice. Alla fine ho capito il problema. La barra di un menu non si attiva/nasconde con comandi da VBA bensi attraverso proprietà dei tag in XML.
Premesso che si sappia già realizzare un menu attraverso l'uso di una tabella UsysRibbons e il relativo codice XML, di seguito proverò a sintetizzare il tutto. L'interazione con un form o un report deriva
1) dalle proprietà (in modalità struttura) di quest'ultimi che richiamano la barra desiderata attraverso la proprietà "Nome barra multifunzione" presente nella scheda "Altro";
2) dagli eventi di forms o reports (tipo Load o Close) desiderati impostati come istruzione con:
globalRibbon.Invalidate
dove globalRibbon è una variabile globale dichiarata in un modulo che indica il nome della barra dichiarato nel campo "RibbonName" della tabella UsysRibbon.
Queste due modalità richiamano una chiamata di callback impostata nella proprietà
getVisible getVisible="nome della routine che si vuole richiamare"
per visualizzare/nascondere una barra, una scheda o un pulsante, o la proprietà
getEnabled getEnabled="nome della routine che si vuole richiamare"
per abilitare o disabilitare un singolo controllo, il tutto impostato attraverso l'XML memorizzato nella tabella UsysRibbon.
Queste routine sono memorizzate in un modulo, ed all'interno di ognuna di esse con il codice opportuno si possono eseguire le operazioni prima descritte. Di seguito il codice per mostrare/nascondere
Public Sub OnGetVisible(ctl As IRibbonControl, ByRef visible)
If ruoloUser = "" Then
visible = False
Exit Sub
End If
' se si accede come amministratore ne mostra la barra
If ruoloUser = "Administrator" Then
visible = True
End If
' se si accede come user nasconde la barra di amministratore
If ruoloUser = "User" Then
Select Case ctl.ID
Case "tab1"
visible = True
Case "tab2"
visible = (ruoloUser = "Administrator") 'ruoloUser è una variabile globale string
End Select
End If
End Sub
oppure per abilitare/disabilitare un controllo o una scheda
Sub GetEnabled(control As IRibbonControl, ByRef enabled)
Select Case control.id
Case "btnON"
[b]enabled [/b]= bolEnabled 'variabile globale
Case "btnOff"
enabled = Not (bolEnabled)
End Select
End Sub
Ultima cosa la chiamata sulla proprietà "OnLoad" dell'XML non è più quella da me scritta nel primo post bensì la seguente:
Public Sub OnRibbonLoad(ribbon As IRibbonUI)
' salva una copia den ribbon per usi successivi del DB
Set globalRibbon = ribbon
End Sub
Mi auguro di essermi spiegato e di aver fatto cosa utile per qualcuno.
Certo se Microsoft avesse realizzato una documentazione efficace...