{"id":55000796,"date":"2011-10-01T00:00:00","date_gmt":"2020-05-22T21:57:56","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=796"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Standardmethode_von_Klassen_nutzen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/","title":{"rendered":"Standardmethode von Klassen nutzen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/bb599745fb434594a5e5d22c0c44a0e4\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wussten Sie, dass Sie f&uuml;r ein Klassenmodul eine Standardmethode festlegen k&ouml;nnen Es funktioniert, und eine solche Methode rufen Sie allein durch die Angabe des entsprechenden Objektnamens auf. Wof&uuml;r man das braucht Na, zum Beispiel, um Ereignisprozeduren f&uuml;r Eigenschaften zu implementieren, bei denen dies normalerweise nicht gelingt. So k&ouml;nnen Sie nun etwa per Ereignisprozedur auf das vollst&auml;ndige Laden einer Webseite mit dem Webbrowser-Steuerelement reagieren anstatt eine Do-While-Schleife so lange laufen zu lassen, bis der gew&uuml;nschte Status erreicht wird.<\/b><\/p>\n<p>Wenn Sie beispielsweise ein Formular programmieren und einer Schaltfl&auml;che auf diesem Formular eine Ereignisprozedur zuweisen m&ouml;chten, also eine Prozedur, die beim Anklicken der Schaltfl&auml;che ausgel&ouml;st wird, brauchen Sie dazu nur zwei Schritte: Sie tragen im Eigenschaftsfenster den Wert <b>[Ereignisprozedur] <\/b>f&uuml;r die Eigenschaft <b>Beim Klicken <\/b>ein und wechseln dann zum VBA-Editor, um die automatisch erstellte Prozedur mit den gew&uuml;nschten Codezeilen zu erg&auml;nzen.<\/p>\n<p>Wenn Sie die Ereignisse eines Objekts von au&szlig;en, also beispielsweise von einem Klassenmodul aus abgreifen m&ouml;chten, deklarieren Sie dieses Objekt mit dem Schl&uuml;sselwort <b>WithEvents<\/b>, also beispielsweise so:<\/p>\n<pre>Dim WithEvents objForm as Form<\/pre>\n<p>&Uuml;ber die beiden Kombinationsfelder des Codefensters des Klassenmoduls greifen Sie dann auf die Ereignisse des jeweiligen Objekts zu und versehen diese mit entsprechenden Ereignisprozeduren.<\/p>\n<p>Es gibt aber auch Ereignisse, auf die Sie nicht wie gewohnt reagieren k&ouml;nnen. Ein Beispiel ist das Objekt <b>XMLHTTP <\/b>der Bibliothek <b>Microsoft XML, v x.0<\/b>.<\/p>\n<p>Damit k&ouml;nnen Sie beispielsweise Webseiten oder sogar komplette Dateien aus dem Internet herunterladen, wie der Beitrag <b>Webservice light <\/b>zeigt (<b>www.access-im-unternehmen.de\/798<\/b>).<\/p>\n<p>Bild 1 liefert einen Einblick in die Member dieser Klasse, wobei <b>onReadyStateChange <\/b>nach einem Kandidaten f&uuml;r ein Ereignis aussieht, aber eigentlich eine Eigenschaft ist.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/StandardmethodeVonKlassenNutzen-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Eventhandler der XMLHTTP-Klasse<\/span><\/b><\/p>\n<p>In diesem Fall w&auml;re eine Ereigniseigenschaft namens <b>onReadyStateChange<\/b> n&uuml;tzlich, weil man mit einer entsprechenden Ereignisprozedur etwa ermitteln k&ouml;nnte, wann die zu ladende Quelle vollst&auml;ndig ist.<\/p>\n<p>Der Objektkatalog gibt preis, dass Sie dieser Eigenschaft ein Objekt zuweisen k&ouml;nnen und nicht etwa eine Zeichenkette, um den Namen einer beim Eintreten dieses vermeintlichen Ereignisses auszul&ouml;senden Prozedur anzugeben.<\/p>\n<p>Au&szlig;erdem steht in der Beschreibung noch <b>Register a complete event handler<\/b>. Was k&ouml;nnen wir damit anfangen<\/p>\n<p><b>Klasse mit Standardmethode<\/b><\/p>\n<p>Der Eigenschaft <b>onReadyStateChange <\/b>k&ouml;nnen Sie ein Objekt auf Basis einer Klasse zuweisen, die &uuml;ber eine Standardmethode verf&uuml;gt, also eine Methode, die nicht explizit aufgerufen werden muss.<\/p>\n<p>Wahrscheinlich kennen Sie Standardeigenschaften von Objekten: Wenn Sie beispielsweise auf den Inhalt eines Textfelds in einem Formular zugreifen m&ouml;chten, k&ouml;nnen Sie dies auf zwei Arten erledigen. Die korrekte Art w&auml;re die folgende:<\/p>\n<pre>Debug.Print Me!txtText.Value<\/pre>\n<p>Eingeb&uuml;rgert hat sich aber die zweite Variante, die es sich zunutze macht, dass Value die Standardeigenschaft dieses Steuerelements ist und Sie diese nicht extra angeben m&uuml;ssen:<\/p>\n<pre>Debug.Print Me!txtText<\/pre>\n<p>Auf die gleiche Weise arbeiten verkappte Ereigniseigenschaften wie <b>onReadyStateChange<\/b>. Dieser k&ouml;nnen Sie ein Objekt zuweisen, das eine Standardmethode besitzt. Schade nur, dass Sie mit dem VBA-Editor keine Standardmethode f&uuml;r eine Klasse festlegen k&ouml;nnen!<\/p>\n<p>Zum Gl&uuml;ck gibt es die M&ouml;glichkeit, dies au&szlig;erhalb des VBA-Editors zu erledigen, und zwar mit einem Text-Editor.<\/p>\n<p>Wir betrachten die Vorgehensweise zun&auml;chst anhand eines einfachen Beispiels. Eine Klasse mit einer Standardmethode soll nach dem Aufruf schlicht ein Meldungsfenster anzeigen. Dazu legen Sie in einer Datenbank eine neue Klasse namens <b>clsDefaultMethod <\/b>an und f&uuml;gen dieser lediglich die folgende Prozedur hinzu:<\/p>\n<pre>Public Sub DefaultMethod()\r\n    MsgBox &quot;Standardmethode aufgerufen!&quot;\r\nEnd Sub<\/pre>\n<p>Speichern Sie die Klasse. Danach legen Sie ein Standardmodul an und erstellen darin eine Prozedur, welche die Standardmethode der neuen Klasse testen soll. Diese Prozedur sieht wie folgt aus:<\/p>\n<pre>Public Sub TestDefaultMethod()\r\n    Dim objDefaultMethod As clsDefaultMethod\r\n    Set objDefaultMethod = New clsDefaultMethod\r\n    objDefaultMethod\r\nEnd Sub<\/pre>\n<p>Wenn Sie die Prozedur <b>TestDefaultMethod <\/b>aufrufen, l&ouml;st dies den Fehler <b>Objekt unterst&uuml;tzt diese Eigenschaft oder Methode nicht <\/b>aus &#8211; und zwar wie erwartet.<\/p>\n<p>Wie sollen wir die Methode namens <b>DefaultMethode <\/b>nun zu einer Standardmethode machen, um diese durch den reinen Aufruf des Objekts auszuf&uuml;hren Dies gelingt in drei Schritten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Speichern Sie die Klasse &uuml;ber den Kontextmen&uuml;befehl <b>Datei exportieren&#8230;<\/b> des Eintrags <b>clsDefaultMethode <\/b>im Objekt-Explorer in einem beliebigen Verzeichnis.<\/li>\n<li class=\"aufz-hlung\">&Ouml;ffnen Sie die Datei in einem Texteditor Ihrer Wahl und f&uuml;gen Sie die Zeile <b>Attribute DefaultMethod.VB_UserMemId = 0 <\/b>als erste Zeile der Prozedur <b>DefaultMethod <\/b>hinzu (s. Bild 2).<\/li>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/StandardmethodeVonKlassenNutzen-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Eine Methode zur Standardmethode machen<\/span><\/b><\/p>\n<li class=\"aufz-hlung\">Kehren Sie zum VBA-Editor zur&uuml;ck. Entfernen Sie die Klasse <b>clsDefaultMethode <\/b>mit dem Kontextmen&uuml;eintrag <b>Entfernen von clsDefaultMethod&#8230; <\/b>und importieren Sie die ge&auml;nderte Fassung (Men&uuml;eintrag <b>Datei|Datei importieren&#8230;<\/b>).<\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p>Fertig! Wenn Sie die Klasse nun im VBA-Editor betrachten, sieht alles wie zuvor aus (s. Bild 3). Unter der Haube hat sich jedoch einiges getan &#8211; dies zeigt sich, wenn Sie die Prozedur <b>TestDefaultMethod <\/b>nochmals aufrufen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/StandardmethodeVonKlassenNutzen-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Im VBA-Editor sind keine &auml;nderungen erkennbar.<\/span><\/b><\/p>\n<p>Nun gelingt der Aufruf der Standardmethode nur durch Angabe des Objektnamens &#8211; das Meldungsfenster erscheint!<\/p>\n<p><b>Ereignis per Standardmethode<\/b><\/p>\n<p>Mit dieser Erkenntnis im Gep&auml;ck kehren wir zur eigentlichen Aufgabenstellung zur&uuml;ck &#8211; dem Ausl&ouml;sen eines Ereignisses, wenn sich der Zustand beim Herunterladen einer Webseite oder einer Datei &auml;ndert.<\/p>\n<p>Wir verwenden zun&auml;chst eine einfache Variante, bei der die Klasse mit der Ereignisprozedur den Gro&szlig;teil der Arbeit &uuml;bernimmt. Damit dies gelingt, &uuml;bergeben wir der Klasse einen Verweis auf das <b>XMLHTTP<\/b>-Objekt &#8211; so kann die Klasse direkt auf die enthaltenen Informationen zugreifen.<\/p>\n<p>Der Prozess beginnt mit dem Aufruf der Prozedur <b>GetWebpageOrFile <\/b>und der &Uuml;bergabe der aufzurufenden Adresse:<\/p>\n<pre>GetWebpageOrFile &quot;http:\/\/www.ebay.de&quot;<\/pre>\n<p>Die Prozedur <b>GetWebpageOrFile<\/b> finden Sie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-29-anchor\">Listing 1<\/a><\/span>. Die Prozedur erstellt zun&auml;chst ein neues <b>XMLHTTP<\/b>-Objekt und speichert den Verweis darauf in der Variablen <b>objXMLHTTPRequest<\/b>. Au&szlig;erdem erzeugt sie eine neue Instanz der Klasse <b>clsXMLHTTPHandler<\/b> (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-30-anchor\">Listing 2<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 1: Herunterladen einer Webseite oder Datei<\/p>\n<pre>Public Function GetWebpageOrFile(ByVal strDateiadresse As String) As Long\r\n    Dim objXMLHTTPRequest As MSXML2.XMLHTTP\r\n    Dim objXMLHTTPHandler As clsXMLHTTPHandler\r\n    Set objXMLHTTPRequest = New MSXML2.XMLHTTP\r\n    Set objXMLHTTPHandler = New clsXMLHTTPHandler\r\n    Set objXMLHTTPHandler.XMLHTTPRequest = objXMLHTTPRequest\r\n    With objXMLHTTPRequest\r\n        .OnReadyStateChange = objXMLHTTPHandler\r\n        .Open &quot;GET&quot;, strDateiadresse, True\r\n        .send &quot;&quot;\r\n    End With\r\nEnd Function<\/pre>\n<p class=\"listingueberschrift\">Listing 2: Klasse mit Standardmethode<\/p>\n<pre>Dim mXMLHttpRequest As MSXML2.XMLHTTP\r\nPublic Property Set XMLHTTPRequest(objXMLHTTPRequest As MSXML2.XMLHTTP)\r\n    Set mXMLHttpRequest = objXMLHTTPRequest\r\nEnd Property\r\nSub OnReadyStateChangeHandler()\r\n    Debug.Print mXMLHttpRequest.ReadyState\r\n    If mXMLHttpRequest.ReadyState = 4 Then\r\n        If mXMLHttpRequest.status = 200 Then\r\n            Debug.Print &quot;Fertig&quot;\r\n        End If\r\n    End If\r\nEnd Sub<\/pre>\n<p>Damit die Standardmethode dieser Klasse sp&auml;ter auf die Informationen des <b>XMLHTTP<\/b>-Objekts zugreifen kann, &uuml;bermitteln Sie dieser einen Verweis darauf. Die Klasse <b>clsXMLHTTPHandler <\/b>bietet dazu eine <b>Property Set<\/b>-Methode an, die den Verweis in der Member-Variablen <b>mXMLHttpRequest <\/b>speichert.<\/p>\n<p>Sie enth&auml;lt au&szlig;erdem eine Prozedur namens <b>OnReadyStateChangeHandler<\/b>. Diese wird, wie oben beschrieben, durch die Zeile <b>Attribute DefaultMethod.VB_UserMemId = 0 <\/b>als Standardmethode der Klasse festgelegt.<\/p>\n<p>In der Prozedur <b>GetWebpageOrFile <\/b>weisen Sie nun der Eigenschaft <b>OnReadyStateChange <\/b>einen Verweis auf die Instanz der Klasse <b>clsXMLHTTPHandler <\/b>zu. Dadurch wird beim Eintreten dieses Ereignisses die Standardmethode dieser Klasse, also <b>OnReadyStateChangeHandler<\/b>, aufgerufen. Diese erledigt in dieser Version nicht viel mehr, als einfach nur bei jedem Aufruf den Status auszugeben und den Ausdruck <b>Fertig <\/b>im Direktfenster anzuzeigen, wenn der Ladevorgang beendet ist.<\/p>\n<p>In der Praxis bedeutet dies, dass Sie f&uuml;r jede Ereigniseigenschaft, die einen Objektverweis als Wert erwartet, eine neue Klasse anlegen m&uuml;ssen, da jede Klasse ja nur &uuml;ber eine Standardmethode verf&uuml;gen kann.<\/p>\n<p>Allzu viele Beispiele f&uuml;r Bibliotheken mit solchen Klassen scheint es jedoch nicht zu geben, sodass der Aufwand und die zus&auml;tzlichen Klassen &uuml;berschaubar bleiben.<\/p>\n<p><b>Praxisbeispiel: Sourcecode von Webseiten<\/b><\/p>\n<p>Im folgenden Beispiel soll der Benutzer eine URL in ein Textfeld eingeben (Achtung: <b>http:\/\/ <\/b>nicht vergessen!). Ein Klick auf die Schaltfl&auml;che sorgt dann daf&uuml;r, dass der Quellcode der Seite geladen und in einem Textfeld angezeigt wird.<\/p>\n<p>Die nachfolgend beschriebenen Code-Elemente stammen aus dem Klassenmodul des Formulars <b>frmLoadURL <\/b>und dem Klassenmodul <b>clsXMLHTTPHandlerWithEvents<\/b> (s. Bild 4).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_05\/StandardmethodeVonKlassenNutzen-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Dieses Beispielformular l&auml;dt den Quellcode von Webseiten.<\/span><\/b><\/p>\n<p>Das Klassenmodul <b>clsXMLHTTPHandlerWithEvents <\/b>soll im Gegensatz zum Klassenmodul des vorherigen Beispiels noch zwei Ereignisse ausl&ouml;sen, die dann innerhalb der erzeugenden Klasse, in diesem Fall dem Klassenmodul des Formulars <b>frmLoadURL<\/b>, mit Code gef&uuml;llt werden k&ouml;nnen.<\/p>\n<p>Au&szlig;erdem soll das Klassenmodul <b>clsXMLHTTPHandlerWithEvents <\/b>zus&auml;tzlich den eigentlichen Ladevorgang &uuml;bernehmen.<\/p>\n<p>Dazu ben&ouml;tigen wir in dieser Klasse zun&auml;chst eine Objektvariable zum Speichern des Verweises auf ein <b>XMLHTTP<\/b>-Objekt, das die Methoden zum Laden der Webseite bereitstellt:<\/p>\n<pre>Dim objXMLHTTPRequest As MSXML2.XMLHTTP<\/pre>\n<p>Beim Instanzieren der Klasse soll gleich ein Objekt des Typs <b>XMLHTTP <\/b>erzeugt werden. Dazu legen Sie das <b>Initialize<\/b>-Ereignis an und f&uuml;llen dieses wie folgt:<\/p>\n<pre>Private Sub Class_Initialize()\r\n    Set objXMLHTTPRequest = New MSXML2.XMLHTTP\r\nEnd Sub<\/pre>\n<p>Die Klasse soll den Sourcecode der geladenen Webseite laden und bereitstellen, also richten wir zu diesem Zweck eine Membervariable namens <b>m_SourceCode <\/b>ein:<\/p>\n<pre>Dim m_SourceCode As String<\/pre>\n<p>Der Inhalt dieser Variablen soll &uuml;ber eine Eigenschaft namens <b>SourceCode <\/b>von au&szlig;en lesbar sein.<\/p>\n<p>Dazu legen Sie eine entsprechende <b>Property Get<\/b>-Prozedur an:<\/p>\n<pre>Public Property Get SourceCode() As String\r\n    SourceCode = m_SourceCode\r\nEnd Property<\/pre>\n<p>An dieser Stelle wechseln wir kurz zum Klassenmodul des Formulars <b>frmLoadURL<\/b>. Dieses soll die Eigenschaften und Methoden der Klasse <b>clsXMLHTTPHandlerWithEvents <\/b>nutzen.<\/p>\n<p>Damit auf die noch zu definierenden Ereignisse der Klasse reagiert werden kann, deklarieren wir eine Objektvariable auf Basis dieses Klassenmoduls mit dem Schl&uuml;sselwort <b>WithEvents<\/b>:<\/p>\n<pre>Dim WithEvents objXMLHTTPHandler\r\nAs clsXMLHTTPHandlerWithEvents<\/pre>\n<p>Um die Klasse einsatzbereit zu machen, legen Sie gleich beim Laden des Formulars ein neues Objekt auf Basis des entsprechenden Klassenmoduls an:<\/p>\n<pre>Private Sub Form_Load()\r\n    Set objXMLHTTPHandler = New clsXMLHTTPHandlerWithEvents\r\nEnd Sub<\/pre>\n<p><b>Laden der URL<\/b><\/p>\n<p>Damit Sie der Klasse <b>clsXMLHTTPHandlerWithEvents<\/b> mitteilen k&ouml;nnen, dass sie den Sourcecode einer Webseite laden soll, legen Sie im Klassenmodul eine entsprechende Methode an. Diese sieht wie folgt aus:<\/p>\n<pre>Public Sub Load(strURL As String)\r\n    With objXMLHTTPRequest\r\n        .OnReadyStateChange = Me\r\n        .Open &quot;GET&quot;, strURL, True\r\n        .send &quot;&quot;\r\n    End With\r\nEnd Sub<\/pre>\n<p>Neben den bereits bekannten Methoden zum &Ouml;ffnen und Laden der angegebenen URL enth&auml;lt diese Methode eine sehr wichtige Anweisung:<\/p>\n<pre>.OnReadyStateChange = Me<\/pre>\n<p>Diese sorgt daf&uuml;r, dass ein Verweis auf die Klasse selbst als Wert der Eigenschaft <b>OnReadyStateChange <\/b>festgelegt wird.<\/p>\n<p>Damit sorgen Sie daf&uuml;r, dass beim Ausl&ouml;sen des Ereignisses <b>OnReadyStateChange <\/b>die Standardmethode der angegebenen Klasse, also der Klasse <b>clsXMLHTTPHandlerWithEvents<\/b> selbst, ausgel&ouml;st wird.<\/p>\n<p>Diese sieht etwas umfangreicher als im vorherigen Beispiel aus (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-36-anchor\">Listing 3<\/a><\/span>). Sie pr&uuml;ft jeweils den Status des Ladevorgangs. Hat die entsprechende Eigenschaft den Wert <b>200<\/b>, wird der Quelltext aus der Eigenschaft <b>responseText <\/b>in die Membervariable <b>m_SourceCode <\/b>eingetragen. Au&szlig;erdem wird mit <b>RaiseEvents <\/b>ein Ereignis namens <b>LoadComplete <\/b>ausgel&ouml;st!<\/p>\n<p class=\"listingueberschrift\">Listing 3: Diese Prozedur wird bei Status&auml;nderungen des Ladevorgangs ausgel&ouml;st.<\/p>\n<pre>Sub OnReadyStateChange()\r\n    If objXMLHTTPRequest.ReadyState = 4 Then\r\n        Select Case objXMLHTTPRequest.status\r\n            Case 200\r\n                m_SourceCode = objXMLHTTPRequest.responseText\r\n                RaiseEvent LoadComplete\r\n            Case Else\r\n                RaiseEvent LoadError(objXMLHTTPRequest.status, objXMLHTTPRequest.statusText)\r\n        End Select\r\n    End If\r\nEnd Sub<\/pre>\n<p>Damit dieses in der instanzierenden Klasse, also etwa im Klassenmodul des Formulars <b>frmLoadURL<\/b>, implementiert werden kann, deklarieren Sie es wie folgt im Klassenmodul <b>clsXMLHTTPHandlerWithEvents<\/b>:<\/p>\n<pre>Public Event LoadComplete()<\/pre>\n<p>Im Klassenmodul des Formulars implementieren Sie das Ereignis dann wie folgt:<\/p>\n<pre>Private Sub objXMLHTTPHandler_LoadComplete()\r\n    Me!txtSourcecode = objXMLHTTPHandler.SourceCode\r\nEnd Sub<\/pre>\n<p>Die einzige Anweisung dieser Ereignisprozedur tr&auml;gt den Sourcecode der fertig geladenen Webseite in die Membervariable <b>m_SourceCode <\/b>ein. Damit der Ladevorgang &uuml;berhaupt startet, rufen Sie die Methode <b>Load <\/b>der Klasse etwa beim Anklicken der Schaltfl&auml;che <b>cmdLaden <\/b>des Formulars auf:<\/p>\n<pre>Private Sub cmdLaden_Click()\r\n    objXMLHTTPHandler.Load Me!txtURL\r\nEnd Sub<\/pre>\n<p><b>Bei Fehler<\/b><\/p>\n<p>Nun kann es auch geschehen, dass die angegebene Seite nicht geladen werden konnte. In diesem Fall soll ein weiteres Ereignis ausgel&ouml;st werden, das Sie wie folgt festlegen:<\/p>\n<pre>Public Event LoadError(lngErr As Long, strDescription As String)<\/pre>\n<p>Die Implementierung erfolgt beispielsweise durch die Ausgabe von Fehlernummer und -meldung in einem einfachen Meldungsfenster:<\/p>\n<pre>Private Sub objXMLHTTPHandler_LoadError(lngErr As Long, strDescription As String)\r\n    MsgBox lngErr &amp; &quot; &quot; &amp; strDescription\r\nEnd Sub<\/pre>\n<p>Das Ereignis <b>LoadError <\/b>wird ebenfalls von der Prozedur <b>OnReadyStateChange <\/b>ausgel&ouml;st, allerdings nur, wenn der Status nach vollst&auml;ndigem Ladevorgang nicht den Wert <b>200 <\/b>enth&auml;lt. Wenn die Seite nicht gefunden werden konnte, liefert das <b>XMLHTTP<\/b>-Objekt beispielsweise den Wert <b>404 <\/b>zur&uuml;ck.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Mit der hier vorgestellten Technik umgehen Sie beispielsweise die wenig elegante <b>Do While<\/b>-Schleife, die sonst n&ouml;tig w&auml;re, um auf das Ende des Ladevorgangs einer Webseite zu warten. Au&szlig;erdem ist es spannend, welche versteckten M&ouml;glichkeiten VBA bietet. Haben Sie weitere Ideen, was sich mit den neuen M&ouml;glichkeiten anfangen l&auml;sst Dann senden Sie diese einfach per E-Mail an <b>info@access-im-unternehmen.de<\/b>!<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Standardmethode.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{2BB71CB5-E1F1-436D-91A3-FEE08A0D0F65}\/aiu_796.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wussten Sie, dass Sie f&uuml;r ein Klassenmodul eine Standardmethode festlegen k&ouml;nnen Es funktoiniert, und eine solche Methode rufen Sie allein durch die Angabe des entsprechenden Objektnamens auf. Wof&uuml;r man das braucht Na, zum Beispiel, um Ereignisprozeduren f&uuml;r Eigenschaften zu implementieren, bei denen dies normalerweise nicht gelingt. So k&ouml;nnen Sie nun etwa per Ereignisprozedur auf das vollst&auml;ndige Laden einer Webseite mit dem Webbrowser-Steuerelement reagieren anstatt eine Do While-Schleife so lange laufen zu lassen, bis der gew&uuml;nschte Status erreicht wird.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662011,66052011,44000025],"tags":[],"class_list":["post-55000796","post","type-post","status-publish","format-standard","hentry","category-662011","category-66052011","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Standardmethode von Klassen nutzen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Standardmethode von Klassen nutzen\" \/>\n<meta property=\"og:description\" content=\"Wussten Sie, dass Sie f&uuml;r ein Klassenmodul eine Standardmethode festlegen k&ouml;nnen Es funktoiniert, und eine solche Methode rufen Sie allein durch die Angabe des entsprechenden Objektnamens auf. Wof&uuml;r man das braucht Na, zum Beispiel, um Ereignisprozeduren f&uuml;r Eigenschaften zu implementieren, bei denen dies normalerweise nicht gelingt. So k&ouml;nnen Sie nun etwa per Ereignisprozedur auf das vollst&auml;ndige Laden einer Webseite mit dem Webbrowser-Steuerelement reagieren anstatt eine Do While-Schleife so lange laufen zu lassen, bis der gew&uuml;nschte Status erreicht wird.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:57:56+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/bb599745fb434594a5e5d22c0c44a0e4\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Standardmethode von Klassen nutzen\",\"datePublished\":\"2020-05-22T21:57:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/\"},\"wordCount\":1896,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/bb599745fb434594a5e5d22c0c44a0e4\",\"articleSection\":[\"2011\",\"5\\\/2011\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/\",\"name\":\"Standardmethode von Klassen nutzen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/bb599745fb434594a5e5d22c0c44a0e4\",\"datePublished\":\"2020-05-22T21:57:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/bb599745fb434594a5e5d22c0c44a0e4\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/bb599745fb434594a5e5d22c0c44a0e4\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Standardmethode_von_Klassen_nutzen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Standardmethode von Klassen nutzen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Standardmethode von Klassen nutzen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/","og_locale":"de_DE","og_type":"article","og_title":"Standardmethode von Klassen nutzen","og_description":"Wussten Sie, dass Sie f&uuml;r ein Klassenmodul eine Standardmethode festlegen k&ouml;nnen Es funktoiniert, und eine solche Methode rufen Sie allein durch die Angabe des entsprechenden Objektnamens auf. Wof&uuml;r man das braucht Na, zum Beispiel, um Ereignisprozeduren f&uuml;r Eigenschaften zu implementieren, bei denen dies normalerweise nicht gelingt. So k&ouml;nnen Sie nun etwa per Ereignisprozedur auf das vollst&auml;ndige Laden einer Webseite mit dem Webbrowser-Steuerelement reagieren anstatt eine Do While-Schleife so lange laufen zu lassen, bis der gew&uuml;nschte Status erreicht wird.","og_url":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:57:56+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/bb599745fb434594a5e5d22c0c44a0e4","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"11\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Standardmethode von Klassen nutzen","datePublished":"2020-05-22T21:57:56+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/"},"wordCount":1896,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/bb599745fb434594a5e5d22c0c44a0e4","articleSection":["2011","5\/2011","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/","url":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/","name":"Standardmethode von Klassen nutzen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/bb599745fb434594a5e5d22c0c44a0e4","datePublished":"2020-05-22T21:57:56+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/bb599745fb434594a5e5d22c0c44a0e4","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/bb599745fb434594a5e5d22c0c44a0e4"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Standardmethode_von_Klassen_nutzen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Standardmethode von Klassen nutzen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000796","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000796"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000796\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000796"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000796"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}