Feed Icon
.NET User Group Leipzig
Page 1 of 4 in the Office category Next Page

Aus irgendwelchen Gründen lässt sich eine Outlook-Datendatei mittels scanpst.exe nicht reparieren und die folgende Fehlermeldung kommt immer wieder:

Fehler in der Datei ... Schließen Sie Outlook und alle anderen E-Mail-Anwendungen, und führen Sie das Tool zum Reparieren des Posteinganges ("Scanpst.exe") aus, um die Fehler in der Datei zu diagnostizieren und zu reparieren. Weitere Informationen zu diesem Tool erhalten Sie in der Hilfe.

Folgende Schritte sind notwendig, um die Daten wiederherzustellen:

  1. Microsoft Outlook beenden
  2. Sicherung der korrupten PST-Datei (liegt meistens unter %localappdata%\Microsoft\Outlook)
  3. scanpst.exe (%ProgramFiles(x86)%\Microsoft Office\Office12 bzw. C:\Programme (x86)\Microsoft Office\Office12) ausführen und die korrupte PST-Datei wählen, ingesamt drei Mal, beim zweiten und dritten Mal sollten keine Fehler mehr erscheinen
  4. Microsoft Outlook starten, z. B. E-Mail erstellen und senden, wenn obige Fehlermeldung kommt, bei 5. weiter ansonsten Ende
  5. Datei, Neu, Outlook-Datendatei, Persönliche Ordner (.pst) für Office Outlook, OK
  6. Elemente dürften sich aus der korrupten PST-Datei in die neue Outlook-Datendatei nicht kopieren bzw. verschieben lassen daher: Datei, Importieren/Exportieren, In Datei exportieren, Weiter, dann Persönliche Ordner-Datei (.pst), Weiter wählen, den obersten Ordner auswählen und Unterordner einbeziehen aktivieren, dann Weiter, bei Exportierte Datei speichern unter einstellen, wo diese Daten hin exportiert werden sollen und Fertigstellen wählen
  7. die korrupte PST-Datei durch diese Datei austauschen und Microsoft Outlook starten

Achtung, folgende Einstellungen gehen dadurch unter anderem verloren:

  • benutzerdefinierte Ansichten
  • benutzerdefinierte Regeln
  • benutzerdefinierte Suchordner
  • abonnierte Kalender

Je nachdem was für eine Lösung eingesetzt wird, wächst die Anzahl der E-Mails im Junk-E-Mail Ordner mehr oder weniger schnell. Ich schaue den Ordner ganz selten mit der Hilfe einer benutzerdefinierten Ansicht durch. Wächst die Anzahl ungelesener (besser: nicht überprüfter) E-Mails von 3 auf 333 könnte man verleitet sein, Zeit mit einer Durchsicht zu verschwenden, anstatt den richtigen Zeitpunkt von alleine zu finden. Junk-E-Mails lasse ich deswegen durch ein Makro einfach automatisch als gelesen markieren. Fazit: Da wurde bei Microsoft nicht mitgedacht, wenn jemand überhaupt keine Anzahl angezeigt haben möchte (siehe Abb. 1 und 2).

Einstellung der Anzeige der Elemente in einem Ordner
Abb. 1: Einstellung der Anzeige der Elemente in einem Ordner

Anzeige der Anzahl ungelesener Elemente beim Junk-E-Mail Ordner
Abb. 2: Anzeige der Anzahl ungelesener Elemente beim Junk-E-Mail Ordner

Folgendes Makro markiert empfangene Junk-E-Mails automatisch als gelesen¹:

Public WithEvents olJunkItems As Outlook.Items

Private Sub Application_Startup()
    Set olJunkItems = ThisOutlookSession.Session.GetDefaultFolder(olFolderJunk).Items
End Sub

Private Sub olJunkItems_ItemAdd(ByVal Item As Object)
If Item Is Nothing Or Item = "" Then
Exit Sub
End If

 Dim junkmail As MailItem Set junkmail = Item junkmail.UnRead = False junkmail.Save End Sub

¹ wie ein solches Makro bei Outlook verwendet wird, steht hier

Vor einigen Tagen habe ich eine Anfrage erhalten, die sich auf Erinnerungen bei Microsoft Outlook und die Anpassung davon bezieht. Bei ganztätigen Terminen setzt Outlook 18 Stunden als Erinnerung, wenn die Option Standarderinnerung per Optionen, Reiter Einstellungen aktiviert ist (Abb. 1). Dabei ist egal, ob 15 Minuten oder ein anderer Wert bei Standarderinnerung eingestellt ist, ganz genauso wie egal ist, wie der Beginn bei Arbeitstagen definiert wird (Abb. 2) – Outlook stellt bei den ganztätigen Terminen immer pauschal 18 Stunden bei der Erinnerung ein (Abb. 3, 4). Das Resümee: Da wurde nicht mitgedacht!

Optionen, Standarderinnerung bei Terminen
Abb. 1.: Optionen, Standarderinnerung bei Terminen

Definition der Arbeitswoche / Beginn & Ende eines Arbeitstages
Abb. 2: Definition der Arbeitswoche / Beginn & Ende eines Arbeitstages

Standarderinnerung, die bei einem Termin automatisch eingestellt wird
Abb. 3: Standarderinnerung, die bei einem Termin automatisch eingestellt wird

Standarderinnerung, die bei einem ganztägigen Ereignis automatisch eingestellt wird
Abb. 4.: Standarderinnerung, die bei einem ganztägigen Ereignis automatisch eingestellt wird

Wie lässt sich diese Problemstellung lösen? Indem bei dem Anlegen ganztätiger Termine die Einstellung von 18 Stunden manuell geändert wird. Klar, aber ist das gute User Experience? Also VBA to the rescue! Folgender VBA-Anwendungscode muss in ThisOutlookSession kopiert und gespeichert werden.

Damit Makros unter Outlook funktionieren, muss die Sicherheit etwas weniger restriktiv gesetzt sein. Das findet sich unter Extras, Makro, Sicherheit, Makrosicherheit. Dort ist der Wert Warnungen für alle Makros bzw. Keine Sicherheitsprüfung für Makros einzustellen (vgl. Abb. 5).

Outlook 2007 – Alle Regeln per Makro ausführen, Makrosicherheit festlegen
Abb. 5: Outlook 2007 – Alle Regeln per Makro ausführen, Makrosicherheit festlegen

Wenn nicht, erscheint bei der Ausführung von unsignierten Makros eine Fehlermeldung (Abb. 6).

Outlook 2007 – Fehlermeldung, wenn Makros deaktiviert sind
Abb. 6: Outlook 2007 – Fehlermeldung, wenn Makros deaktiviert sind

Wenn der Wert Warnungen für alle Makros gewählt wird, erscheint dann eine Warnung beim Starten von Outlook (Abb. 7). Demzufolge ist der Wert Keine Sicherheitsüberprüfung für Makros sinnvoll.

Sicherheitshinweis bei Makros durch Outlook 2007
Abb. 7: Sicherheitshinweis bei Makros durch Outlook 2007

Das Makro wird dann über Extras, Makro, Makros, Bearbeiten bei ThisOutlookSession eingefügt (Abb. 8).
Nach einem Neustart von Outlook werden beim Anlegen ganztägiger Termine diese mit 16 h Erinnerung versehen. Über den Wert bei ReminderMinutesBeforeStart kann dieser Zeitraum gesteuert werden.

Was lernen wir daraus? Jeder sollte ein bisschen VB(A) können, meint zumindest vielleicht Microsoft... ;)

Einfügen vom VBA-Anwendungscode in ThisOutlookSession
Abb. 8: Einfügen vom VBA-Anwendungscode in ThisOutlookSession

Public WithEvents olAppointmentItems As Outlook.Items

Private Sub Application_Startup()
    Set olAppointmentItems = ThisOutlookSession.Session.GetDefaultFolder(olFolderCalendar).Items
End Sub

Private Sub olAppointmentItems_ItemAdd(ByVal Item As Object)
    If Item Is Nothing Or Item = "" Then
Exit Sub
End If

Dim appointment As AppointmentItem Set appointment = Item If appointment.AllDayEvent = True Then appointment.ReminderMinutesBeforeStart = 960 '60 Minuten * 16 appointment.Save End If End Sub

Der Spam ist dankenswerterweise durch Maßnahmen von Alex bei unserer Servertechnik stark reduziert worden. Ab und zu kommt Spam dennoch an und ich finde es ist nervend, die üblichen E-Mails wie mit dem Betreff "Viagrrra" zu löschen. Die können von mir aus ohne Zutun automatisch gelöscht werden. Da bin ich immer erstaunt, wie oft ich gefragt werde, was ist, wenn eine wichtige E-Mail dadurch gelöscht wird. Erstens ist es sehr unwahrscheinlich geschäftliche E-Mails mit dem Betreff "Viagrrraaa" zu erhalten, zweitens gibt es eine Sicherung über das Adressbuch. "Aber wenn dann doch..." beantworte ich so: Wer eine E-Mail nicht beantwortet bekommt, fragt erneut an oder greift einfach zum Telefon... und dann ist schweigen bei den Zweifelnden. Tja, Kanalreduktion und die verführerische Einfachheit der elektronischen Kanäle führen zu falschen Anreizen und Fehlsteuerungswirkungen. Aber das ist ein ganz anderes Thema.

Wie benutzerdefinierte Spam-Filter bei Outlook eingerichtet werden, wollte ich nicht bloggen. Da ich sie aber des Öfteren schon einrichten "musste" :), hier als Blogeintrag für das Archiv der Welt.

Die Regeln werden über Extras, Regeln und Benachrichtigungen bei Outlook eingerichtet.

Automatisches Löschen von E-Mails an bestimmte E-Mail-Adressen

  • löscht E-Mails, die an foo@foo.de adressiert sind (nützlich bei E-Mail-Verteilern)

benutzerdefinierte Regel gegen Spam 

Automatisches Löschen von E-Mails von bestimmten Personen / Absendern

  • löscht E-Mails z. B. von
    • "MSNBC Breaking News" oder "Max Mustermann"
  • sofort, wenn das als Absender bei der E-Mail-Anwendung des Absenders eingestellt wurde
  • und der Absender nicht im Adressbuch enthalten ist
     Absender MSNBC Breaking News

benutzerdefinierte Regel gegen Spam

Automatisches Löschen von E-Mails mit einem bestimmten Betreff

  • löscht E-Mails z. B. mit dem Betreff
    • "Blaues Wunder"
  • sofort, außer der Absender ist im Adressbuch enthalten

benutzerdefinierte Regel gegen Spam

Automatisches Löschen von E-Mails mit einem bestimmten Inhalt

  • löscht z. B. E-Mails bei denen irgendwo im Inhalt steht
    • "Die Aktienempfehlung des Monats"
  • sofort, außer der Absender ist im Adressbuch enthalten

benutzerdefinierte Regel gegen Spam

Nach den Blogeinträgen

bin ich mehrfach gefragt worden, wie man Regeln in bestimmten Ordnern ausführen kann. Das heißt, es geht nicht um durch Microsoft vordefinierte Ordner, sondern beliebige, die von Endanwendern definiert werden. Es funktioniert so:

Sub RunAllRules()
    Dim outlookStore As Outlook.Store
    Dim allRules As Outlook.Rules
    Dim actualRule As Outlook.Rule
    Dim resultFolder As Folder
    
    Set outlookStore = Application.Session.DefaultStore
    Set allRules = outlookStore.GetRules
    Set resultFolder = GetFolderByName( _
        rootFolder:=OlDefaultFolders.olFolderInbox, folderName:="Test")
    
    For Each actualRule In allRules
        If actualRule.RuleType = olRuleReceive Then
            actualRule.Execute _
               ShowProgress:=False, _
               Folder:=Application.Session.GetFolderFromID(EntryIDFolder:=resultFolder.EntryID), _
               IncludeSubfolders:=False, _
               RuleExecuteOption:=OlRuleExecuteOption.olRuleExecuteAllMessages
        End If
    Next
             
    Set outlookStore = Nothing
    Set allRules = Nothing
    Set actualRule = Nothing
End Sub
Function GetFolderByName(rootFolder As OlDefaultFolders, folderName As String) As Folder
    Dim folders As folders
    Dim actualFolder As Folder
    Set folders = Application.Session.GetDefaultFolder(rootFolder).folders

    For Each actualFolder In folders
        If actualFolder.Name = folderName Then
            Set GetFolderByName = actualFolder
            Exit Function
        End If
    Next
End Function
Das Besondere liegt also darin, dass über die Funktion GetFolderByName die ID des jeweiligen Ordners ermittelt wird, in dem die Regeln ausgeführt werden sollen. Dazu muss bei:
 
Set resultFolder = GetFolderByName( _
    rootFolder:=OlDefaultFolders.olFolderInbox, folderName:="Test")

der Ordner angegeben werden unter dem der jeweilige Ordner liegt als auch sein Name.

In der nachfolgenden Abbildung wird dieses gut ersichtlich. Hier befindet sich der Ordner Test unterhalb von Posteingang (olFolderInbox) und heißt eben "Test". Mit dem obigen Anwendungscode werden dann alle definierten Regeln in diesem Ordner ausgeführt. Non scholae, set vitae discimus.

Outlook 2007 – Regeln in einem bestimmten Ordner ausführen

Page 1 of 4 in the Office category Next Page

CEO bei GROSSWEBER, Entrepreneur, Entwickler, Finanzinvestor. Promoter von Community, Open Source und
Open Spaces.

Ich biete Consulting und Schulungen / Trainings, u. a. zu mobilen Geräten, Lync.
GROSSWEBER

Bei GROSSWEBER wird praktiziert, was gepredigt wird. Dort werden Schulungen für moderne Softwaretechnologien angeboten, wie Behavior Driven Development, Clean Code, Git oder HTML5. Their staff is fluent in a variety of languages, including English.

Categories

Calendar

<August 2014>
SunMonTueWedThuFriSat
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

Archive

My subscribed blogs

Blogs of good friends