<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="OnRibbonLoad">
<ribbon startFromScratch="true">
...
<group id="grpLock_Unlock" label="Lock - Unlock">
<button id="btnLock" size="large" label="Lock" imageMso="GroupProtect"
onAction="cmdOnActionButton" getEnabled="cbGetEnabled"/>
<button id="btnEdit" size="large" label="Edit"
imageMso="ReviewAcceptChange" onAction="cmdOnActionButton"
getEnabled="cbGetEnabled"/>
<button id="btnDelete" size="large" label="Delete"
imageMso="ReviewRejectChange" onAction="cmdOnActionButton"
getEnabled="cbGetEnabled"/>
</group>
...
Public Sub cbGetEnabled(ctl As IRibbonControl, ByRef enabled)
enabled = bolEnabled
End Sub
Public Sub cbGetEnabledSet(RibbonCtrlID As String, pressed As Boolean)
bolEnabled = pressed
gobjRibbon.InvalidateControl RibbonCtrlID
End Sub
Public Sub OnRibbonLoad(ribbon As IRibbonUI)
Set gobjRibbon = ribbon
End Sub
Wenn ich die Funktion cbGetEnabledSet aufrufe (um den Status zu ändern),
kommt die Fehlermeldung. Interessant ist, wenn ich im Direktfenster den Code
eingeben ... InvalidateControl "btnEdit" dann klappts. Wo kann ich da noch
suchen?
Besten Dank im voraus für Eure Hilfe! Karl-Heinz
UserOG schrieb folgendes:
> Wenn ich die Funktion cbGetEnabledSet aufrufe (um den Status zu
> ändern), kommt die Fehlermeldung. Interessant ist, wenn ich im
> Direktfenster den Code eingeben ... InvalidateControl "btnEdit"
> dann klappts. Wo kann ich da noch suchen?
Kann ich nicht nachvollziehen. Es funktioniert Beiedes bei mir:
gobjRibbon.InvalidateControl RibbonCtrlID
gobjRibbon.InvalidateControl "btnEdit"
An welcher Stelle ruft Du "cbGetEnabledSet " auf?
Gruß
Gunter
--
__________________________________________________________
Access FAQ: http://www.donkarl.com
home: http://www.avenius.com - http://www.AccessRibbon.de
ich rufe von einem Formular aus eine Funktion auf, die sich in einem Modul
befindet . Im folgenden ein Auszug:
Do
If rsMenu!Active = True Then
'Call cbGetEnabledSet(rsMenu!RibbonCtrlID, True)
bolEnabled = True
gobjRibbon.InvalidateControl rsMenu!RibbonCtrlID
Else
'Call cbGetEnabledSet(rsMenu!RibbonCtrlID, False)
bolEnabled = False
gobjRibbon.InvalidateControl rsMenu!RibbonCtrlID
End If
rsMenu.MoveNext
Die callback ist in einem gesondertem Modul - aber alle als public
definiert. Wie Du siehst, habe ich probiert (s.o.) die sub aufzurufen bzw.
den Code direkt in die Funktion zu schreiben.
Ich finde das etwas mysteriös, kann aber nicht daran liegen, dass ich mit
Front End und Back End arbeite und einige Datentabellen und Forms aus einer
alten db übernommen habe? Wäre unlogisch, aber ... Alle Verweise sind
gesetzt.
Gruß
Karl-Heinz
UserOG schrieb folgendes:
> ich rufe von einem Formular aus eine Funktion auf, die sich in einem Modul
> befindet . Im folgenden ein Auszug:
>
> Do
> If rsMenu!Active = True Then
> 'Call cbGetEnabledSet(rsMenu!RibbonCtrlID, True)
> bolEnabled = True
> gobjRibbon.InvalidateControl rsMenu!RibbonCtrlID
> Else
> 'Call cbGetEnabledSet(rsMenu!RibbonCtrlID, False)
> bolEnabled = False
> gobjRibbon.InvalidateControl rsMenu!RibbonCtrlID
> End If
> rsMenu.MoveNext
>
> Die callback ist in einem gesondertem Modul - aber alle als public
> definiert. Wie Du siehst, habe ich probiert (s.o.) die sub aufzurufen bzw.
> den Code direkt in die Funktion zu schreiben.
>
> Ich finde das etwas mysteriös, kann aber nicht daran liegen, dass ich mit
> Front End und Back End arbeite und einige Datentabellen und Forms aus einer
> alten db übernommen habe? Wäre unlogisch, aber ... Alle Verweise sind
> gesetzt.
und "rsMenu!RibbonCtrlID" liefert Dir das richtige Ribbon Control?
Wenn Du viele Controls im Ribbon dynamisch auf einmal ändern möchtest
kannst Du auch das komplette Ribbon neu zeichnen lassen:
gobjRibbon.Invalidate
Ich heiße zwar nicht Gunter....
Bist du dir sicher, dass du nur *einen* Ribbon definiert hast?
Falls ein anderer etwa einem Formular zugewiesen wurde und die OnLoad-Callback
aufruft, dann wird gobjRibbon überschrieben und hat quasi eine andere
RibbonControls-Auflistung.
Wenn mehrere Ribbons, dann brauch man auch mehrere globale IRibbonUI-Variablen
bzw. Collections davon.
Ist nur so ne Vermutung...
Ciao, Sascha
"UserOG" <Use...@domain.com> schrieb im Newsbeitrag
news:C2408B6B-FFAA-4CC0...@microsoft.com...
Auch wenn ich - nach initialisierung - einzelne btn ändern möchte, geht das
auf die Bretter. Hier der Code:
Public Sub RibbonModNotActive()
On Error Resume Next
Call cbGetEnabledSet("btnLock", False)
Call cbGetEnabledSet("btnEdit", False)
Call cbGetEnabledSet("btnDelete", False)
End Sub
Hier sollen die btn deaktiviert werden. Dazu wir die Funktion
cbGetEnabledSet aufgerufen - und dann geht das wieder auf die Bretter!!
Ideen? Grüße Karl-Heinz
ich habe keine Idee, wie mehrere ribbons definiert haben soll? Klar in der
tb UISys sind zwei Datensätze vorhanden, aber über das Access Menü weise ich
nur ein ribbon zu. Und ich habe keine Funktion, dass ich bspw.
Formularabhängig den 2. "Datensatz" aktivieren würde.
Grüße Sascha
UserOG schrieb folgendes:
> ich habe keine Idee, wie mehrere ribbons definiert haben soll? Klar in der
> tb UISys sind zwei Datensätze vorhanden, aber über das Access Menü weise ich
> nur ein ribbon zu. Und ich habe keine Funktion, dass ich bspw.
> Formularabhängig den 2. "Datensatz" aktivieren würde.
Hast Du in beiden Ribbon XMls ein ...onLoad="OnRibbonLoad drin?
Grüße
Karl-Heinz
Und wenn du :
rsMenu!RibbonCtrlID.Value
schreibst?
rsMenu!RibbonCtrlID ist schließlich ein Field-Objekt, kein String.
Ciao, Sascha
"UserOG" <Use...@domain.com> schrieb im Newsbeitrag
news:BC6A2DD9-D6DB-442F...@microsoft.com...
bei folgendem Auruf tritt das Problem auch auch:
Public Sub RibbonModNotActive()
On Error Resume Next
Call cbGetEnabledSet("btnLock", False)
Call cbGetEnabledSet("btnEdit", False)
Call cbGetEnabledSet("btnDelete", False)
End Sub
und da übergebe ich explizit den String. Alles scheint o.k. - könnte es
sein, dass Access beim komprimieren der db irgendwas zerschießt? Nach dem
Import von tb und frms aus einer alten db war die immerhin 45MB groß und nach
dem komprimieren sind es 3.6 MB
Gruß Karl-Heinz
Public Sub GetEnabled(control As IRibbonControl, ByRef enabled)
Select Case control.Id
'Case "tglBtnInfo"
' enabled = False
Case Else
'enabled = True
' Ändern in:
enabled = bolEnabled
End Select
End Sub
Besten Dank an Gunter Avenius.
Gruß
Karl-Heinz