Access 2010: Das Webbrowser-Steuerelement

Mit Access 2010 baut Microsoft das Webbrowser-Steuerelement direkt in Access ein und vereinfacht damit einiges gegenüber der Verwendung des entsprechenden ActiveX-Steuerelements. Dieser Beitrag stellt die Möglichkeiten dieses neuen Steuerelements vor und zeigt die Unterschiede zum bisher verwendeten ActiveX-Steuerelement auf.

Das Webbrowser-Steuerelement finden Sie nun neben den übrigen Steuerelementen im Ribbon unter Entwurf|Steuerelemente (s. Bild 1).

pic001.png

Bild 1: Einfügen des Webbrowser-Steuerelements

Nach dem Einfügen und dem Wechsel in die Formularansicht zeigt das Steuerelement erwartungsgemäß noch keine Internetseite, sondern eine entsprechende Fehlermeldung an (s. Bild 2). Aber woher sollte es auch wissen, welche Internetadresse es anzeigen soll

pic002.png

Bild 2: Das Steuerelement in der Formularansicht – noch ohne Füllung

Nun, das lässt sich ändern: Wir fügen einfach eine Tabelle namens tblWebseiten zur Datenbank hinzu, die lediglich die beiden Felder WebseiteID und Webseite enthält.

Tragen Sie einige Datensätze mit gültigen Internetadressen in diese Tabelle ein. Stellen Sie dann die Eigenschaft Datenherkunft des Formulars mit dem Webbrowser-Steuerelement auf diese Tabelle ein und weisen Sie der Eigenschaft Steuerelementinhalt des Webbrowser-Steuerelements den Namen des Tabellenfeldes Webseite zu.

Wie Bild 3 zeigt, liefert das Webbrowser-Steuerelement nun die gewünschten Webinhalte. Und das ist die erste tolle Neuerung des in Access integrierten Webbrowser-Steuerelements: Es lässt sich an ein Feld einer Datenherkunft binden. Das heißt, Sie können in einem Formular immer gleich die Internetseite zu einem in einem Feld gespeicherten Link anzeigen. Dieses Formular finden Sie in der Beispieldatenbank unter dem Namen frmWebbrowser_Gebunden.

pic005.png

Bild 4: Webbrowser-Steuerelement mit ungebundenem Textfeld zur Adresseingabe

Ungebundene Anzeige von Webseiten

Wenn Sie die Webseite ändern möchten, ohne das Webbrowser-Steuerelement an ein Feld einer Tabelle zu binden, sind ein paar zusätzliche Handgriffe nötig. In der Beispieldatenbank finden Sie ein fertiges Formular mit den folgenden Funktionen unter dem Namen frmWebbrowser_Ungebunden (s. Bild 4). Das Formular besitzt keine Datenherkunft und das Webbrowser-Steuerelement ist dementsprechend nicht an ein Feld gebunden.

pic003.png

Bild 3: Ein an ein Feld der Datenherkunft gebundenes Webbrowser-Steuerelement

Damit es trotzdem eine Internetseite anzeigt, würden wir seine Eigenschaft Value nun im ersten Anlauf mit der gewünschten Internetadresse füttern. Die folgende Anweisung schlägt jedoch fehl:

Forms!frmWebbrowser_Ungebunden.ctlWebbrowser.Value = "http://www.access-im-unternehmen.de"

Stattdessen müssen wir wie beim alten Webbrowser-ActiveX-Steuerelement vorgehen und zunächst eine Objektvariable mit dem Datentyp Webbrowser deklarieren:

Dim objWebbrowser As WebBrowser

Im Formularereignis Beim Laden weisen wir diesem Objekt einen Verweis auf die Object-Eigenschaft des Webbrowser-Steuerelements zu:

Private Sub Form_Load()
    Set objWebbrowser = Me!ctlWebbrowser.Object
End Sub

Schließlich soll dieses eine Internetseite anzeigen. Dazu legen wir im Formular ein Textfeld namens txtWebseite und für dieses eine Prozedur für die Ereigniseigenschaft Nach Aktualisierung an:

Private Sub txtWebseite_AfterUpdate()
    objWebbrowser.Navigate2 Me!txtWebseite.Value
End Sub

Wenn Sie nun in die Formularansicht wechseln, eine Internetseite in das Textfeld eintragen und die Eingabetaste betätigen, lädt das Webbrowser-Steuerelement die Internetseite ohne Probleme.

Nach diesem kleinen Ausflug begeben wir uns zurück zu den Möglichkeiten des reinen Access-Steuerelements – die Navigate2-Methode war jedoch wichtig, weil sonst kein Laden von Seiten ohne URL in einem gebundenen Feld möglich ist.

Fertig

Beim automatischen Laden von Internetseiten interessiert uns in vielen Fällen der Zeitpunkt, wann das Webbrowser-Steuerelement die Seite fertig geladen hat. Dies können wir wie früher mit dem soeben deklarierten Objekt objWebbrowser erledigen, wobei wir dessen Deklaration um das Schlüsselwort WithEvents erweitern müssen:

Dim WithEvents objWebbrowser As WebBrowser

Danach können Sie über die beiden Kombinationsfelder oben im Klassenmodul des Formulars zuerst das Objekt objWebbrowser und dann das Ereignis NavigateComplete2 auswählen. Der VBA-Editor legt dann automatisch eine Ereignisprozedur an, die wie folgt aussieht:

Private Sub ctlWebbrowser_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    MsgBox "Seite ''" & URL & "'' vollständig geladen"
End Sub

Dies hat früher gereicht, um das vollständige Laden der angegebenen Seite zu registrieren. In Zeiten des Web 2.0 gelingt dies nicht mehr: Wenn Sie beispielsweise www.amazon.de aufrufen, werden gleich noch eine Reihe Frames geladen – und die lösen fast alle das Ereignis DocumentComplete aus. Welches also signalisiert mir, dass die eigentliche Seite geladen ist

Die Lösung ist einfach: Der Parameter pDisp entspricht jeweils einem Zeiger auf das IDispatch-Interface des Fensters oder Frames, in dem sich die geladene Seite befindet.

Es liefert also einen Verweis auf das Webbrowser-Objekt, wenn es sich um die Hauptseite handelt, oder einen Verweis auf das Frame-Objekt der Hauptseite (oder einer untergeordneten Seite), das die geladene Seite enthält.

Die für uns wichtige Erkenntnis ist: Wenn pDisp in DocumentComplete gleich dem Webbrowser-Objekt ist, wurde gerade das Laden der Hauptseite beendet. Die folgende Prozedur gibt eine Meldung aus, wenn die richtige Seite fertig geladen wurde:

Private Sub ctlWebbrowser_DocumentComplete(ByVal _
    pDisp As Object, URL As Variant)
    If objWebbrowser Is pDisp Then
        MsgBox "Seite ''" & URL & "'' geladen."
    End If
End Sub

URL auslesen

Auch wenn die angezeigte Internetadresse bekannt sein sollte, bietet die Eigenschaft LocationURL die Möglichkeit, die aktuelle URL auszulesen. Die obige Prozedur können Sie somit auch wie folgt gestalten:

Private Sub ctlWebbrowser_DocumentComplete( _
        ByVal pDisp As Object, URL As Variant)
    If objWebbrowser Is pDisp Then
        MsgBox "Seite ''" & Me.ctlWebbrowser.LocationURL & "'' geladen."
    End If
End Sub

Ereignisse des Webbrowser-Steuerelements

Das Steuerelement besitzt noch drei weitere Ereigniseigenschaften:

  • Bei Vor Navigieren
  • Bei Navigationsfehler
  • Bei Fortschrittsänderung

Gegenüber den 16 Ereignisprozeduren des Originalsteuerelements scheint das etwas wenig zu sein, aber das ist kein Problem – Sie können ja über das oben erwähnte Element auf die übrigen Ereignisse zugreifen.

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