13.07.2015 Aufrufe

Makro-Kochbuch - WollMux

Makro-Kochbuch - WollMux

Makro-Kochbuch - WollMux

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

2.5.6 Einzelfehler ohne MeldungEine letzte Gruppe von Fehlerbehandlungen soll auch noch erwähnt werden: Nicht immer musses zu einer entsprechenden Fehlermeldung kommen – es gibt auch durchaus Fälle, in denenmit einem Fehler gerechnet werden muss, ohne dass dieser erheblich für den Programmablaufist oder diesen nachhaltig stört. Solche Fehler müssen dennoch abgefangen und „neutralisiert“werden, denn sonst würden sie trotzdem eine Systemfehlermeldung produzieren und das<strong>Makro</strong> abstoppen.Ein Beispiel wäre die folgende Situation: Sie möchten erkunden, ob eine Datei bereits geöffnetist und somit ein Fenster auf dem Bildschirm repräsentiert. Dies ist wichtig für das „Filehandling“(siehe auch Kapitel 3). Zum Check prüfen Sie nun jedes bereits geöffnete Fenster hinsichtlichdes Titels (Titelzeile). Dabei kann es nun vorkommen, dass ein Fenster gar keinen „Titel“ besitztoder dieser gar nicht ausgelesen werden kann. Geprüft wird jetzt, ob das Fensterobjekt einInterface "com.sun.star.frame.XModel" unterstützt – nur dann kann ein Titel überhauptausgelesen werden. Leider gibt es aber auch Komponenten, die diese Eigenschaften überhauptnicht besitzen – und schon die Prüfmethode „HasUnoInterface“ schief läuft und einen Fehlerprovoziert. Nun sind diese Elemente völlig irrelevant für die eigentliche Prüfung und für denProgrammfortschritt – der Fehler ist also ebenfalls nicht wichtig – er muss aber abgefangenwerden, um einen Programmstopp zu verhindern. In diesem Fall kommt dann das „on Errorresume next“ zum Einsatz, d.h. ein Fehler wird ignoriert und das Programm läuft einfach weiter.Da die Funktion gekapselt ist und weitere Auswirkungen nicht zu erwarten sind, kann dieseGeneralklausel hier verwendet werden – ja, sie muss eigentlich. Als Programmierer/in musseinem aber klar sein, welche anderen Fehler auftreten könnten, die für den Programmverlaufentscheidend wären, und man muss entsprechend die Funktionen so kleinteilig gestalten, dassdie Verwendung der Generalklausel keine anderen Auswirkungen hat als die gewünschte. Hierdas Code-Beispiel – detailliert später nochmals in Kapitel 3.2.2:Function CheckFensterOffen(sFensterTitel As String)Dim oComp as variant 'Alle KomponentenDim oElement as variant 'ein einzelnes Elementdim sFrameTitle as string, oLeer as objectoComp = StarDesktop.getComponents.CreateEnumerationon Error resume nextDo While oComp.HasMoreElementsoElement = oComp.NextElement()If HasUnoInterfaces(oElement, "com.sun.star.frame.XModel") ThensFrameTitle = oElement.currentController.Frame.titleIf left(lcase(sFrameTitle), len(sFenstertitel)) = lCase(sFensterTitel) then 'Fensterschon offenCheckFensterOffen = oElementexit functionend ifEnd IfLoopCheckFensterOffen = oLeerLHM – <strong>Makro</strong>-<strong>Kochbuch</strong> 2012 29

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!