Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Prozeduren im Formularmodul per Ribbon auslösen

Das Gerücht hält sich hartnäckig: Callback-Funktionen von Ribbons gehören in ein Standardmodul. Das stimmt aber gar nicht: Wenn Sie beispielsweise ein Formular mit einem Ribbon ausstatten, können Sie dessen Callback-Funktionen durchaus auch direkt in das Klassenmodul des Formulars schreiben. Es gibt zwar ein paar Besonderheiten, aber die erläutert dieser Artikel.

Beispieldatenbank

Die Beispieldatenbank zu diesem Artikel finden Sie unter dem folgenden Link.

Callbacks im Formularmodul

Normalerweise sammelt man die Callbackfunktionen der Ribbons einer Anwendung in einem Standardmodul, das beispielsweise mdlRibbon heißt. Normalerweise ist das kein Problem, aber es gibt Anwendungsfälle, in denen dies nicht unbedingt die beste Lösung ist. Wenn Sie etwa ein Ribbon verwenden, dass in Zusammenhang mit einem Formular angezeigt wird, möchten Sie die dadurch aufgerufenen Funktionen möglicherweise auch direkt im Klassenmodul des Formulars unterbringen - dort können Sie dann über das Schlüsselwort Me auch viel einfacher auf die Elemente der aktuellen Klasse zugreifen.

Das können Sie natürlich auch über den Umweg einer Callbackfunktion in einem Standardmodul erreichen, die dann ihrerseits den Aufruf einer im Formularmodul öffentlich deklarierten Prozedur enthält. Aber: Es ist immer noch ein Umweg, und Sie müssen die entsprechende Prozedur im Klassenmodul des Formular als öffentliche Routine deklarieren.

Verzicht auf Callback-Parameter

Wenn Sie auf die üblicherweise beim Aufruf einer Callbackfunktion übergebenen Parameter verzichen können, brauchen Sie diesen Umweg gar nicht zu gehen: Dabei geben Sie für das onAction-Attribut genau wie früher bei den Menü- und Symbolleisten einfach einen Funktionsaufruf in der Form =Funktionsname() an. Der Code für ein solches Ribbon sieht so aus:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">

    <ribbon startFromScratch="true">

        <tabs>

            <tab id="id30642" label="<tab>">

                <group id="id30643" label="<group>">

                    <button id="btnFormularRibbon" label="Klick löst Formularfunktion aus." onAction="=onAction()"/>

                </group>

            </tab>

        </tabs>

    </ribbon>

</customUI>

Die passende Routine im Klassenmodul des Formulars können Sie dabei sogar als private Funktion deklarieren:

Private Function onAction()

    MsgBox "onAction"

End Function

Benutzerdefinierte Parameter

Dabei können Sie sogar noch benutzerdefinierte Parameter übergeben. Dazu fügen Sie einfach den gewünschten Ausdruck in Hochkommate eingefasst in die Klammern des Aufrufs der Callbackfunktion ein:

<button id="btnFormularRibbon" label="Klick löst Formularfunktion aus." onAction="=onAction('test')"/>

Der Routine im Klassenmodul des Formulars fügen Sie dabei einen handelsüblichen Parameter hinzu:

Private Function onAction(strTest As String)

    MsgBox "onAction: " & strTest

End Function

Einschränkungen

Diese Vorgehensweise passt für alle Fälle, in denen Sie keine der dynamisch erzeugten Callbackparameter wie etwa den enabled-Status eines Steuerelements oder den pressed-Status einer Umschaltfläche auslesen müssen.

Ebenso sind hier keine optionalen Parameter zulässig.

 

 

 

© 2003-2015 André Minhorst Alle Rechte vorbehalten.