Outlook spricht
Auf den Artikel in c't 19/01, der zeigte, wie man Outlook zum Vorlesen von E-Mails, Aufgaben und Terminen bringt, haben sich ungewöhnlich viele Leser gemeldet. Einige hatten Probleme, andere schlugen Verbesserungen und sinnvolle Erweiterungen vor.
- Ralf Nebelo
‘Ein Programm versucht, auf Ihre in Outlook gespeicherten Adressen zuzugreifen. Möchten Sie dies zulassen?’ Viele Leser fragten, wie man diese lästige Nachfrage beim Vorlesen von E-Mails verhindern könne. Die Meldung ist Teil des ‘Outlook-Update für die E-Mail-Sicherheit’, das standardmäßig in Outlook XP enthalten ist und sich für Outlook 2000 - beispielsweise über das Service Pack 2 für Office 2000 - nachrüsten lässt (ältere Outlook-Versionen kann man nicht per VBA programmieren). Das Update soll in erster Linie verhindern, dass sich Mail-Viren vom Typ Melissa, Nimda & Co. heimlich an den programmeigenen Adressbeständen zu schaffen machen. Da man das Update nicht separat deinstallieren kann, bleibt Outlook-XP-Anwendern wohl oder übel nur das Klicken auf ‘Ja’, da der Dialog natürlich auch jede Form der programmierten Bestätigung - beispielsweise per SendKeys-Anweisung - ignoriert. Outlook-2000-Anwender können sich zwar des Updates entledigen, müssen dazu aber das gesamte Office-2000-Paket neu installieren.
Fehlermeldungen
Mit dem Update meint es Microsoft sicher gut, doch Anlass zur Kritik bleibt. Denn es verhindert nicht nur die unkontrollierte Weiterverbreitung von E-Mail-Viren, sondern auch so gut wie jede vernünftige Art der Outlook-Programmierung - selbst wenn die beteiligten Makros über ein anerkanntes Sicherheitszertifikat verfügen. Da sollte Microsoft dringend nachbessern.
In mehreren berichteten Fällen moniert Outlook den Objektbezeichner wspMund mit der Meldung ‘Fehler beim Kompilieren. Methode oder Datenobjekt nicht gefunden.’ Das ist ein untrüglicher Hinweis darauf, dass das WebSpeech-Control nicht (richtig) installiert ist. Es kommt darauf an, das Control - das übrigens auch unter Windows 2000 funktioniert - von www.webspeech.de/download.php3 zu laden, per Setup zu installieren und erst dann die Projektdateien von heise online zu importieren. Der Menübefehl ‘Extras/Zusätzliche Steuerelemente’ ist, wie beschrieben, nur verfügbar, wenn im Visual-Basic-Editor eine Userform zur Bearbeitung geöffnet ist.
Das Vorlesen von E-Mails bricht Outlook mit einem ‘Laufzeitfehler 13’ ab, wenn der Posteingang neben Nachrichten eine oder mehrere Lesebestätigungen enthält. Diese werden von Outlook makrotechnisch als ReportItem-Objekte behandelt, während Nachrichten MailItem-Objekte darstellen. Das Makro ‘UngeleseneNachrichtenVorlesen’ berücksichtigt diesen Unterschied nicht und provoziert deshalb den Fehler. Der lässt sich aber leicht beheben, indem man die Zeile Dim objNachricht MailItem in Dim objNachricht As Object ändert. Sofern das Problem auch beim Vorlesen von fälligen Aufgaben und Terminen auftritt, sollte man die Makros ‘FälligeAufgabenVorlesen’ und ‘FälligeTermineVorlesen’ ebenfalls entsprechend ändern und den Variablen objAufgabe beziehungsweise objTermin hinter dem As-Schlüsselwort der Dim-Anweisung den pauschalen Typ Object zuweisen.
Einige wenige Leser beklagten, dass Outlook beim Vorlesen von noch ungelesenen Nachrichten abzustürzen scheint. Auf Nachfrage stellte sich dann aber fast immer heraus, dass der Posteingang der Betreffenden mitunter einige tausend Nachrichten enthielt.
Für die Abarbeitung von derart vielen Mails benötigt das Makro einfach eine gewisse Zeit, was Outlook zur zwischenzeitlichen Untätigkeit verdammt und daher auf einen Absturz schließen lässt. In einem solchen Fall sollte man Mails per ‘Datei/Archivieren’ auslagern, um den Posteingang von überalterten Elementen zu befreien.
Deinstallation
Wer dazu nicht bereit ist oder die Sprachausgabe aus anderen Gründen unbedingt wieder loswerden möchte, kann sich der Makros wie folgt entledigen:
* Starten Sie den Visual-Basic-Editor via ‘Extras/Makro/Visual Basic Editor’; * öffnen Sie das Klassenmodul DieseOutlookSitzung per Doppelklick im ‘Projekt’-Fenster und löschen Sie die darin enthaltenen Routinen Application_Startup, Application_NewMail, Application_Quit und ButtonAnlegen; * klicken Sie im ‘Projekt’-Fenster jeweils mit der rechten Maustaste auf die Projektbestandteile frmVorlesen und OL_Vorlesen und entfernen Sie diese; * speichern Sie die Änderungen und schließen Sie den Visual-Basic-Editor; * aktivieren Sie unter ‘Ansicht/Symbolleisten/Anpassen’ das Register ‘Symbolleisten’, markieren Sie dort ‘Sprachausgabe’ und wählen ‘Löschen’.
Falls Sie zuvor keine anderen Makros in Outlook verwendet haben, geht das auch einfacher: Den kompletten Makrospeicher beseitigt man, indem man die Datei VBAProject.otm mit Hilfe der Windows-eigenen Suchen-Funktion aufspürt und dann löscht oder umbenennt, etwa in VBAProject.ot$. Outlook startet dann beim nächsten Mal ganz ohne Makros.
Erweiterungen
Mehrere Leser wünschten sich die Position der Symbolleiste ‘Sprachausgabe’ am oberen statt am unteren Rand des Programmfensters. Dazu ist die Zeile Position = msoBarBottom innerhalb des Makros ‘Application_Startup’ in Position = msoBarTop zu ändern. Durch Ändern der Position-Eigenschaft in msoBarLeft oder msoBarRight kann man das Fenster auch an den linken oder rechten Rand des Programmfensters verschieben.
Viele Outlook-Benutzer verwenden Regeln, um neu eingegangene Mails automatisch in bestimmte Unterordner des Posteingangs verschieben zu lassen. Damit die Sprachausgabe auch solche Nachrichten berücksichtigt, haben wir das Makro ‘UngeleseneNachrichtenVorlesen’ erweitert und auf heise online zum Download bereitgestellt (Datei 0122-222.zip). Sie liest zunächst die ungelesenen Mails im Posteingang vor und arbeitet sich dann der Reihe nach durch dessen Unterordner, um auch die darin gespeicherten neuen Nachrichten zu Gehör zu bringen.
Wer seine E-Mails nicht über den Posteingang, sondern einen anderen Ordner erhält, etwa über einen IMAP-Account, kann sich alternativ dessen Inhalt vorlesen lassen. Dazu ist die Zeile
Set objPosteingang = _ objNameSpace.GetDefaultFolder( _ olFolderInbox)
zu Beginn des Makros ‘UngeleseneNachrichtenVorlesen’ in
Set objPosteingang = _ objNameSpace.Folders _ ('Meine Mailbox')
zu ändern, wobei ‘Meine Mailbox’ durch den Namen des jeweiligen Ordners zu ersetzen ist. (se) (ha)