Office-Dokumente in Formularen anzeigen

Es kommt immer wieder vor, dass eine Anwendung entweder auf die Daten in Word- oder Excel-Dokumenten zugreift – entweder um ihre Inhalte zu lesen oder diese zu ändern. Normalerweise öffnen Sie das entsprechende Dokument dann entweder sichtbar oder unsichtbar und führen die gewünschten Aktionen durch. Wie wäre es, wenn Sie Word, Excel und Co. statt im eigenen Fenster direkt innerhalb eines Access-Formulars anzeigen könnten Dieser Beitrag stellt die dazu notwendigen Voraussetzungen und Techniken vor.

Natürlich gibt es mit dem OLE-Objekt-Feld in Tabellen und dem Steuerelement Gebundenes Objektfeld bereits eine Möglichkeit, Word-, Excel- und andere Office-Dokumente innerhalb eines Access-Dokuments anzuzeigen.

Bild 1 zeigt, wie das etwa unter Access 2010 aussieht: Dort wird das Access-Ribbon komplett ausgeblendet und das Word-Ribbon aktiviert – mit Ausnahme des Datei-Registerreiters.

pic003.png

Bild 1: Bearbeiten eines im OLE-Steuerelement angezeigten Word-Dokuments innerhalb eines Access-Formulars

Es fällt jedoch sehr unangenehm auf, dass ein Hin- und Herschalten zwischen dem gebundenen Objektfeld und eventuellen weiteren Steuerelementen im Formular ein ständiges Flackern sowie das Ein- und Ausblenden des Menüs der jeweiligen Anwendung hervorruft.

Alternativ öffnen Sie das Office-Dokument direkt etwa in einem eigenen Word- oder Excel-Fenster. Hier ist jedoch viel Aufwand erforderlich, um die Benutzeraktionen in Zusammenhang mit dem jeweiligen Element zu steuern – der Benutzer kann das Dokument beispielsweise schließen oder speichern, auch wenn dies nicht gewünscht ist.

Das DSOFramer-Steuerelement

Grundlage für die in diesem Beitrag vorgestellten Techniken ist das ActiveX-Steuerelement DSOFramer_moss.ocx.

Es handelt sich dabei um ein Beispiel von Microsoft zum Einbetten OLE-fähigen Anwendungen wie Word oder Excel. Die Original-Quellen von Microsoft, die offensichtlich nicht mehr verfügbar sind, wurden durch Sascha Trowitzsch angepasst und eingedeutscht.

Die im Download verfügbare Datei DSOFramer_moss.ocx muss mit der folgenden Anweisung im System registriert werden:

RegSvr32.exe <Dateipfad>.DSOFramer_moss.ocx

Um das Steuerelement zu einem Formular hinzuzufügen, öffnen Sie das Formular in der Entwurfsansicht und zeigen den Dialog zum Einfügen von ActiveX-Steuerelementen an. Dort finden Sie nun auch einen Eintrag namens DSOFramer Control Object (s. Bild 3 aus.

pic001.png

Bild 2: Einfügen des DSOFramer-Steuerelements

pic002.png

Bild 3: Ein mit dem DSOFramer-Steuerelement ausgestattetes Formular in der Entwurfsansicht

Beachten Sie, dass das DSOFramer-Steuerelement lediglich den Rahmen für die Anzeige der Office-Dokumente liefert. Die Anwendungen selbst, also Word, Excel und Co., müssen ebenfalls auf dem betroffenen Rechner installiert sein.

Dokument öffnen

Als Erstes interessiert uns natürlich, wie wir ein Dokument in das DSOFramer-Steuerelement laden und dieses somit anzeigen können.

Die einfachste Möglichkeit bietet die Benutzeroberfläche des Steuerelements: Hinter dem File-Menü oben links verbergen sich nämlich die üblichen Datei-Befehle, darunter auch einer zum Öffnen eines Dokuments.

Aber Sie können ein Dokument natürlich auch unter Einsatz von VBA öffnen. Dies erledigt die Methode Open des Objekts objDSOFramer, die Sie beispielsweise so aufrufen:

Me!ctlDSOFramer.Open CurrentProject.Path & "\test.docx"

Im Formular erscheint nun wie in Bild 4 das angegebene Dokument. Die Open-Methode ermöglicht noch weitere Parameter, zum Beispiel diese:

pic005.png

Bild 4: Das DSOFramer-Steuerelement mit Word als Anwendung innerhalb eines Access-Formulars

  • ReadOnly: Legt fest, ob das Dokument schreibgeschützt geöffnet werden soll. Wird True angegeben, können Sie das Dokument zwar bearbeiten, aber nicht unter dem gleichen Namen speichern. Mit der Boolean-Eigenschaft IsReadOnly können Sie später abfragen, ob das aktuelle Dokument schreibgeschützt wurde (Me!ctlDSOFramer.IsReadOnly).
  • ProgId: Gibt die ProgID der Anwendung an, mit der das Dokument geöffnet werden soll.

Genau wie hier unter Office 2010 erscheinen auch unter älteren Versionen die Menüleisten/Ribbons der jeweiligen Anwendung.

Allerdings sind einige Elemente nicht verfügbar: Hier unter Office 2010 fehlt beispielsweise der Registerreiter Datei, der den Backstage-Bereich mit den Funktionen etwa zum Speichern oder Drucken des aktuellen Dokuments anzeigt.

Dafür liefert das DSOFramer-Steuerelement ein eigenes Menü mit den entsprechenden Befehlen (s. Bild 5).

pic006.png

Bild 5: Dateimenü des DSOFramer-Steuerelements

Steuerelement referenzieren

Auch wenn sich die Eigenschaften und Methoden von ActiveX-Steuerelementen per direkter Referenz auf das Steuerelement (beispielsweise Me!ctlDSOFramer) nutzen lassen, wollen wir dafür eine eigene Objektvariable deklarieren, die beim Öffnen des Formulars gefüllt wird.

Einer der Vorteile dieser Vorgehensweise ist, dass so alle Eigenschaften und Methoden des Objekts per IntelliSense verfügbar sind:

Dim WithEvents objDSOFramer As
DSOFramer.FramerControl

Das Schlüsselwort WithEvents bewirkt, dass Sie für das neue Objekt objDSOFramer Ereignisprozeduren anlegen können – dazu später mehr.

Anschließend hinterlegen Sie die folgende Prozedur für die Ereigniseigenschaft Beim Laden des Formulars:

Private Sub Form_Load()
    Set objDSOFramer = Me!ctlDSOFramer.Object
End Sub

DSOFramer-Elemente ein- und ausblenden

Die beiden Leisten im oberen Bereich des DSOFramer-Steuerelements benötigen Sie möglicherweise nicht für jeden Einsatzzweck.

Die Titelleiste mit dem Dateinamen blenden Sie mit der Eigenschaft TitleBar ein und aus. Die folgende Anweisung lässt diese verschwinden:

Me!ctlDSOFramer.Titlebar = False

Mit den beiden Eigenschaften TitlebarColor und TitlebarTextColor können Sie auch die Schrift- und Hintergrundfarbe der Titelleiste anpassen, hier etwa mit weißer Schrift und grauem Hintergrund:

With Me!ctlDSOFramer
    .TitlebarColor = &HCCCCCC
    .TitlebarTextColor = &HFFFFFF
End With

Die Menüleiste blenden Sie mit der Eigenschaft MenuBar ein und aus. Um diese auszuschalten, verwenden Sie beispielsweise die folgende Anweisung:

Me!DSOFramer.MenuBar = False

Schließlich können Sie auch die Anzeige der Menü-/Ribbonleiste der angezeigten Anwendung beeinflussen. Dies erledigen Sie mit der entsprechenden Einstellung der Eigenschaft MenuBar, hier etwa zum Ausblenden:

Me!ctlDSOFramer.MenuBar = False

Wenn Sie alle drei Elemente ausblenden, zeigt das Formular nur noch das nackte Dokument an.

Elemente der Host-Anwendung wie etwa die Kontextmenüs sind jedoch nach wie vor verfügbar (s. Bild 6).

pic007.png

Bild 6: Dieses Access-Formular zeigt nur noch das reine Dokument an.

Aussehen des DSOFramer-Steuerelements

Es gibt noch ein paar Eigenschaften, mit denen Sie das Aussehen des Steuerelements beeinflussen können:

  • BackColor: Stellt die Hintergrundfarbe ein, solange kein Dokument geladen ist
  • BorderColor: Stellt die Rahmenfarbe ein.
  • BorderStyle: Stellt die Rahmenart ein. Mögliche Werte: dsoBorderNone (0), dsoBorderFlat (1), dsoBorder3D (2) und dsoBorder3DThin (3).
  • ForeColor: Stellt die Farbe des Vordergrundes ein. Es ist allerdings nicht ersichtlich, wo diese sichtbar ist.
  • Caption: Entspricht dem Text in der Titelzeile links vom Dateinamen, falls vorhanden.

DSOFramer-Menü einstellen

Auch das Aussehen des Menüs können Sie einstellen – zumindest, was das Aktivieren und Deaktivieren der Einträge angeht. Die notwendige Eigenschaft heißt EnableFileCommand und erwartet einen Parameter und eine Wertzuweisung.

Mit dem Parameter Item übergeben Sie eine Konstante, die dem Menüeintrag entspricht. Durch die Wertzuweisung übergeben Sie die Information, ob der mit dem Parameter angegebene Menüeintrag aktiviert oder deaktiviert werden soll. Es gibt die folgenden Konstanten:

  • dsoFileNew (0)
  • dsoFileOpen (1)
  • dsoFileClose (2)
  • dsoFileSave (3)
  • dsoFileSaveAs (4)
  • dsoFilePrint (5)
  • dsoFilePageSetup (6)
  • dsoFileProperties (7)
  • dsoFilePrintPreview (8)

Die folgende Anweisung deaktiviert beispielsweise den Eintrag zum Schließen des aktuellen Dokuments:

objDSOFramer.EnableFileCommand(dsoFileClose) = False

Dokumente im DSOFramer

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar