{"id":55000441,"date":"2024-10-01T00:00:00","date_gmt":"2024-11-05T20:39:58","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=441"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Outlook_Gesendete_Mails_per_COMAddIn_verschieben","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Outlook_Gesendete_Mails_per_COMAddIn_verschieben\/","title":{"rendered":"Outlook: Gesendete Mails per COM-Add-In verschieben"},"content":{"rendered":"<p><b>In einem anderen Artikel namens &#8220;Outlook: Mails nach dem Senden per VBA verschieben&#8221; (www.vbentwickler.de\/440) haben wir die grundlegenden Techniken gezeigt, mit denen wir E-Mails, die wir selbst versendet haben, nicht in den Ordner Gesendete Elemente verschieben, sondern in einen Ordner unserer Wahl. Damit k&ouml;nnen wir einfach E-Mails in bestimmten Kontexten direkt in einen Ordner verschieben, wo auch die &uuml;brigen E-Mails zu diesem Thema landen. Eigentlich l&auml;uft diese Funktion automatisch und bedarf keiner Benutzer-Interaktion, aber wir ben&ouml;tigen eine M&ouml;glichkeit, die Regeln f&uuml;r das Verschieben der E-Mails zu definieren. Dazu haben wir eine Textdatei benutzt, die wir f&uuml;r den Benutzer auf einfachem Wege zug&auml;nglich machen wollen, zum Beispiel durch das Anklicken eines Ribbonbuttons. Dazu verwenden wir ein COM-Add-In, dem wir auch noch die eigentliche Funktion hinzuf&uuml;gen &#8211; und noch ein paar Extras. In diesem Artikel beschreiben wir, wie Du ein solches COM-Add-In mit twinBASIC ganz einfach selbst bauen kannst.<\/b><\/p>\n<p>Das fertige COM-Add-In findest Du in Versionen f&uuml;r 32-Bit und 64-Bit im Download zu diesem Artikel. Wir beschreiben in diesem Artikel die interessantesten Funktionen des COM-Add-Ins.<\/p>\n<h2>Funktion des COM-Add-ins<\/h2>\n<p>Das COM-Add-In soll Outlook um Funktionen erweitern, mit denen wir festlegen k&ouml;nnen, dass gesendete E-Mails mit bestimmten Empf&auml;nger-E-Mail-Adressen in vorgegebene Outlook-Ordner verschoben werden.<\/p>\n<p>Das ist eine Funktion, die automatisiert ablaufen sollte. Allerdings ist dazu die Konfiguration der E-Mails und der gew&uuml;nschten Zielordner erforderlich. Um diese zu realisieren, f&uuml;gen wir dem Ribbon von Outlook mit dem COM-Add-In zwei Eintr&auml;ge hin einer eigenen Gruppe hinzu.<\/p>\n<p>Diese soll wie in Bild 1 im Ribbon-Tab <b>Senden\/Empfangen<\/b> erscheinen. Hier finden wir zwei neue Eintr&auml;ge:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_05\/pic_441_001.png\" alt=\"Integration des COM-Add-Ins in die Benutzeroberfl&auml;che\" width=\"649,627\" height=\"207,4438\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Integration des COM-Add-Ins in die Benutzeroberfl&auml;che<\/span><\/b><\/p>\n<ul>\n<li><b>Ordner f&uuml;r gesendete E-Mails bearbeiten<\/b>: Klicken wir diesen Eintrag an, erscheint zun&auml;chst die Meldung aus Bild 2. Danach wird die Textdatei mit der Konfiguration in der als Text-Editor voreingestellten Anwendung ge&ouml;ffnet &#8211; Erl&auml;uterung dazu siehe weiter unten.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_05\/pic_441_002.png\" alt=\"Meldung mit Anweisungen f&uuml;r die Konfigurationsdatei\" width=\"424,6267\" height=\"230,3455\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Meldung mit Anweisungen f&uuml;r die Konfigurationsdatei<\/span><\/b><\/p>\n<li><b>Speicherort der Konfigurationsdatei &auml;ndern<\/b>: Dieser Befehl &ouml;ffnet einen Dateiauswahl-Dialog, mit dem eine alternative Konfigurationsdatei ausgew&auml;hlt werden kann.<\/li>\n<\/ul>\n<p>Die Konfigurationsdatei sieht beispielsweise wie in Bild 3 aus. Sie erwartet die Eingabe der einzelnen Zeilen in der Form, dass wir zun&auml;chst die E-Mail-Adresse des Empf&auml;ngers eingeben, dessen E-Mails nach dem Versenden in einen anderen Ordner verschoben werden sollen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_05\/pic_441_003.png\" alt=\"Beispiel f&uuml;r die Konfigurationsdatei\" width=\"499,6267\" height=\"240,0076\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Beispiel f&uuml;r die Konfigurationsdatei<\/span><\/b><\/p>\n<h2>Installieren des COM-Add-Ins<\/h2>\n<p>Wenn Du die Funktionen des COM-Add-Ins auch in Deinem Outlook nutzen m&ouml;chtest, kannst Du das ganz einfach erledigen. Speichere die Datei <b>amvSentMailFolders_win32.dll<\/b> oder <b>amvSentMailFolders_win64.dll<\/b>, je nachdem, welche Office-Version Du verwendest, in einem beliebigen Verzeichnis.<\/p>\n<p>Dann &ouml;ffnest Du Outlook und klickst auf <b>Datei|Optionen<\/b>. Im <b>Optionen<\/b>-Dialog w&auml;hlst Du den Bereich <b>Add-Ins <\/b>aus. W&auml;hle unten unter <b>Verwalten: <\/b>den Eintrag <b>COM-Add-Ins <\/b>aus und klicke dann auf <b>Los&#8230;<\/b>, um den Dialog <b>COM-Add-Ins zu <\/b>&ouml;ffnen.<\/p>\n<p>Hier findest Du die Schaltfl&auml;che <b>Hinzuf&uuml;gen&#8230;<\/b>, mit der Du einen Dateiauswahl-Dialog &ouml;ffnest (siehe Bild 4). W&auml;hle hier eine der oben genannten DLL-Dateien aus und das COM-Add-In wird automatisch registriert und sollte nun direkt startbereit sein. Gegebenenfalls musst Du Outlook nochmal neu starten. Danach findest Du die beiden neuen Eintr&auml;ge im Ribbon von Outlook vor. <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_05\/pic_441_004.png\" alt=\"Installieren des COM-Add-Ins &uuml;ber die Benutzeroberfl&auml;che\" width=\"649,627\" height=\"271,3763\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Installieren des COM-Add-Ins &uuml;ber die Benutzeroberfl&auml;che<\/span><\/b><\/p>\n<h2>Funktionsweise des COM-Add-Ins<\/h2>\n<p>Das COM-Add-In enth&auml;lt die folgenden Elemente:<\/p>\n<ul>\n<li><b>amvSendMailFolders.twin<\/b>: Enth&auml;lt die Hauptfunktionen zum Starten und Steuern des COM-Add-Ins.<\/li>\n<li><b>DllRegistration.twin<\/b>: Enth&auml;lt die Funktionen zum Registrieren und De-Registrieren des COM-Add-Ins in der Registry.<\/li>\n<li><b>mdlAPI.twin<\/b>: Enth&auml;lt die Definition einer API-Funktion zum &Ouml;ffnen einer Datei mit der daf&uuml;r festgelegten Anwendung.<\/li>\n<li><b>mdlFileDialog.twin<\/b>: Enth&auml;lt die Funktion zum &Ouml;ffnen eines Dateiauswahl-Dialogs.<\/li>\n<li><b>mdlGlobal.twin<\/b>: Enth&auml;lt globale Variablen.<\/li>\n<li><b>mdlRegistry.twin<\/b>: Enth&auml;lt Funktionen f&uuml;r das Lesen und Schreiben der Bereiche der Registry, die f&uuml;r VB- und VBA-Anwendungen vorgesehen sind.<\/li>\n<\/ul>\n<h2>Beim Starten des COM-Add-Ins<\/h2>\n<p>Wenn wir das COM-Add-In mit <b>twinBASIC <\/b>bearbeiten und dort auf den Men&uuml;befehl <b>File|Build <\/b>klicken, wird die Funktion zum Registrieren der Anwendung aus dem Modul <b>DllRegistration <\/b>ausgef&uuml;hrt. Die gleiche Funktion wird ausgef&uuml;hrt, wenn wir das COM-Add-In mit <b>RegSvr32 <\/b>registrieren oder &uuml;ber den entsprechenden Dialog von Outlook installieren &#8211; wie oben beschreiben.<\/p>\n<p>Das COM-Add-In verwendet zwei Schnittstellen, um auf den Aufruf der Anwendung zu reagieren, in der es verwendet werden soll, in diesem Fall Outlook. Die erste hei&szlig;t <b>IDTExtensibility2 <\/b>und die zweite <b>IRibbonExtensibility<\/b>.<\/p>\n<p>Die erste stellt einige Ereignisprozeduren zur Verf&uuml;gung, von denen wir die namens <b>OnConnection <\/b>mit Code f&uuml;llen. Die anderen ben&ouml;tigen wir eigentlich nicht, aber wenn wir die Schnittstelle <b>IDTExtensibility <\/b>implementieren, m&uuml;ssen wir auch alle Ereignisprozeduren implementieren.<\/p>\n<p>Die Prozedur <b>OnConnection <\/b>wird beim Starten des COM-Add-Ins aufgerufen und enth&auml;lt den folgenden Code:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>OnConnection(ByVal Application<span style=\"color:blue;\"> As Object<\/span>, _\r\n         ByVal ConnectMode<span style=\"color:blue;\"> As <\/span>ext_ConnectMode, _\r\n         ByVal AddInInst<span style=\"color:blue;\"> As Object<\/span>, _\r\n         ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) _\r\n         Implements IDTExtensibility2.OnConnection\r\n     <span style=\"color:blue;\">Set<\/span> objOutlook = Application\r\n     <span style=\"color:blue;\">Call<\/span> CheckConfigurationFile()\r\n     <span style=\"color:blue;\">Call<\/span> Aktivieren\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Im Wesentlich liefert sie einen Verweis auf die aufrufende Outlook-Instanz, den wir in der folgenden Variablen speichern (im Modul <b>mdlGlobal<\/b>, da diese auch in anderen Modulen verwendet wird):<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>objOutlook<span style=\"color:blue;\"> As <\/span>Outlook.Application<\/pre>\n<p>Au&szlig;erdem ruft sie die Prozedur <b>CheckConfigurationFile <\/b>auf. Diese versucht, den Pfad aus dem entsprechenden Bereich der Registry auszulesen. Dieser wird beim ersten Start noch nicht vorhanden sein, was dazu f&uuml;hrt, dass <b>strFilePath<\/b> nach der Abfrage der Registry mit <b>GetAppSetting <\/b>mit dem Pfad aus <b>App.Path &#038; &#8220;\\SentMailFolders.txt&#8221; <\/b>gef&uuml;llt ist. Wenn diese Datei noch nicht vorhanden ist, wird sie mit der Prozedur <b>CreateConfigurationFile <\/b>angelegt, der wir mit <b>strFilePath <\/b>den Pfad &uuml;bergeben. Schlie&szlig;lich wird der Pfad in der Registry hinterlegt:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>CheckConfigurationFile()\r\n     strFilePath = GetAppSetting(\"FilePath\", App.Path & _\r\n         \"\\SentMailFolders.txt\", <span style=\"color:blue;\">False<\/span>)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Dir(strFilePath)) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Call<\/span> CreateConfigurationFile(strFilePath)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Call<\/span> SaveAppSetting(\"FilePath\", strFilePath)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Konfigurationsdatei erstellen<\/h2>\n<p>Die Prozedur <b>CreateConfigurationFile <\/b>erwartet den Pfad zu der zu erstellenden Datei als Parameter. Sie nutzt das <b>FileStream<\/b>-Objekt, um die Konfigurationsdatei zu erstellen und eine Beispielzeile einzutragen.<\/p>\n<p>Anschlie&szlig;end speichert sie die neu erstellte Datei:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>CreateConfigurationFile(strPath<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objFSO<span style=\"color:blue;\"> As Object<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objFileStream<span style=\"color:blue;\"> As Object<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objFSO = _\r\n         CreateObject(\"Scripting.FileSystemObject\")\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> objFSO.FileExists(strPath)<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> objFileStream = _\r\n             objFSO.CreateTextFile(strPath, <span style=\"color:blue;\">True<\/span>)\r\n         objFileStream.WriteLine _\r\n             \"test@test.de|<\/font>Outlook\\Posteingang\"\r\n         objFileStream.Close\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objFileStream = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> objFSO = Nothing\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Aktivieren der Funktionen des COM-Add-Ins<\/h2>\n<p>Schlie&szlig;lich ruft die Prozedur <b>OnConnection <\/b>noch die Prozedur <b>Aktivieren <\/b>auf. Diese haben wir bereits im Artikel <b>Outlook: Mails nach dem Senden per VBA verschieben <\/b>(<b>www.vbentwickler.de\/440<\/b>) beschrieben. Sie erstellt die <b>Items<\/b>-Auflistung f&uuml;r die Elemente im Ordner <b>Gesendete Elemente<\/b>, f&uuml;r die wir eine ebenfalls in diesem Artikel beschriebene Ereignisprozedur definiert haben. Diese sorgt daf&uuml;r, dass eine in den Ordner <b>Gesendete Elemente <\/b>gelangende E-Mail dahingehend untersucht wird, ob die Empf&auml;nger-E-Mail-Adresse in der Konfigurationsdatei des COM-Add-Ins enthalten ist. Auf diese eigentliche Funktion wollen wir in diesem Artikel nicht mehr explizit eingehen.<\/p>\n<h2>Anzeigen des Ribbons<\/h2>\n<p>Die zweite Schnittstelle ist f&uuml;r das Einlesen und Anwenden der Ribbondefinition des COM-Add-Ins verantwortlich. Sie stellt nur eine Funktion zur Verf&uuml;gung, die ebenfalls beim Start des COM-Add-Ins aufgerufen wird und sieht wie in Listing 1 aus.<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>GetCustomUI(ByVal RibbonID<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span> Implements IRibbonExtensibility.GetCustomUI\r\n     <span style=\"color:blue;\">Dim <\/span>strXML<span style=\"color:blue;\"> As String<\/span>\r\n     Select Case RibbonID\r\n         <span style=\"color:blue;\">Case <\/span>\"Microsoft.Outlook.Explorer\"\r\n             strXML &= \"&lt;customUI xmlns=\"\"http:\/\/schemas.microsoft.com\/office\/2009\/07\/customui\"\" \" _\r\n                 & \"loadImage=\"\"LoadImage\"\" onLoad=\"\"onLoad\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strXML &= \"  &lt;ribbon startFromScratch=\"\"false\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strXML &= \"    &lt;tabs&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strXML &= \"      &lt;tab idMso=\"\"TabSendReceive\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strXML &= \"        &lt;group id=\"\"grpEditSendMailFolders\"\" insertAfterMso=\"\"GroupSendReceive\"\" \" _\r\n                 & \"label=\"\"amvSendMailFolders\"\"&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strXML &= \"          &lt;button id=\"\"btnEditSentMailFolders\"\" imageMso=\"\"QuickStepTemplateMoveToFolder\"\" \" _\r\n                 & \"size=\"\"large\"\" label=\"\"Ordner f&uuml;r gesendete E-Mails bearbeiten\"\" onAction=\"\"onAction\"\"\/&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strXML &= \"          &lt;button id=\"\"btnConfigurationFile\"\" imageMso=\"\"OpenAttach\"\" size=\"\"large\"\" \" _\r\n                 & \"label=\"\"Speicherort der Konfigurationsdatei &auml;ndern\"\" onAction=\"\"onAction\"\"\/&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strXML &= \"        &lt;\/group&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strXML &= \"      &lt;\/tab&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strXML &= \"    &lt;\/tabs&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strXML &= \"  &lt;\/ribbon&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             strXML &= \"&lt;\/customUI&gt;\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n             Return strXML\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Die Funktion GetCustomUI stellt eine Ribbondefinition zusammen und gibt diese zur&uuml;ck.<\/span><\/b><\/p>\n<p>In der Funktion <b>GetCustomUI <\/b>stellen wir die Ribbon-Definition zusammen, welche die Gruppe mit den beiden neuen Schaltfl&auml;chen f&uuml;r das COM-Add-In zum Ribbon von Outlook hinzuf&uuml;gen soll.<\/p>\n<p>In der Funktion fragen wir zun&auml;chst ab, welchen Wert der Parameter <b>RibbonID <\/b>hat. Outlook ist die einzige Office-Anwendung, die mehrere Fenster mit Ribbondefinitionen enth&auml;lt. Daher pr&uuml;fen wir hier, ob es sich tats&auml;chlich um das Hauptfenster handelt. Dieses hei&szlig;t <b>Microsoft.Outlook.Explorer<\/b>.<\/p>\n<p>Danach folgt das Zusammenstellen einer Ribbon-Definition, welche mit dem <b>tab<\/b>-Element und der <b>idMso <\/b>mit dem Wert <b>TabSendReceive <\/b>das <b>Senden\/Empfangen<\/b>-Tab referenziert. Auf diese Weise k&ouml;nnen wir mit dem folgenden <b>group<\/b>-Element eine neue Gruppe in diesem eingebauten <b>tab<\/b>-Element anlegen. Diese nennen wir <b>grpEditSendMailFolders <\/b>und wir wollen diese direkt hinter der ersten Gruppe mit der ID <b>GroupSendReceive <\/b>einf&uuml;gen. Deshalb stellen wir das Attribut <b>insertAfterMso <\/b>auf diesen Wert ein.<\/p>\n<p>Danach folgen bereits die beiden <b>button<\/b>-Elemente. F&uuml;r diese haben wir eingebaute Icons verwendet. Dazu geben wir die <b>idMso<\/b> dieser Elemente an.<\/p>\n<p>Diese k&ouml;nnen wir beispielsweise in den Outlook-Optionen unter <b>Men&uuml;band anpassen <\/b>ermitteln, indem wir dort unter <b>Befehle ausw&auml;hlen <\/b>den Eintrag <b>Alle Befehle <\/b>ausw&auml;hlen, uns das gew&uuml;nschte Icon aus der Liste ausw&auml;hlen und die <b>idMso <\/b>ermitteln, indem wir mit der Maus &uuml;ber dem Eintrag verharren und aus dem nun erscheinenden <b>ToolTipText<\/b> den englischen Ausdruck in Klammern entnehmen (siehe Bild 5). Diesen Ausdruck geben wir f&uuml;r die Eigenschaft <b>imageMso <\/b>der <b>button<\/b>-Elemente an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2024_05\/pic_441_005.png\" alt=\"idMso eines Elements herausfinden\" width=\"549,6265\" height=\"378,247\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: idMso eines Elements herausfinden<\/span><\/b><\/p>\n<h2>Funktionen f&uuml;r die Ribbonbuttons<\/h2>\n<p>F&uuml;r das Attribut <b>onAction <\/b>hinterlegen wir f&uuml;r beide <b>button<\/b>-Elemente den Wert <b>onAction<\/b>. So hei&szlig;t dann auch die Prozedur, die beim Anklicken ausgel&ouml;st werden soll. Diese finden wir in Listing 2.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>OnAction(control<span style=\"color:blue;\"> As <\/span>IRibbonControl)\r\n     <span style=\"color:blue;\">Dim <\/span>strPath<span style=\"color:blue;\"> As String<\/span>\r\n     Select Case control.Id\r\n         <span style=\"color:blue;\">Case <\/span>\"btnEditSentMailFolders\"\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Dies &ouml;ffnet die Textdatei mit den Zuordnungen der Empf&auml;ngeradresse zu den Ordnern.\" & <span style=\"color:blue;\">vbCrLf<\/span> _\r\n                 & \"Passe die Eintr&auml;ge an und speichere die Datei.\" & <span style=\"color:blue;\">vbCrLf<\/span> & <span style=\"color:blue;\">vbCrLf<\/span> _\r\n                 & \"Die Datei muss in folgendem Format aufgebaut sein:\" & <span style=\"color:blue;\">vbCrLf<\/span> _\r\n                 & \"test@test.de|<\/font>Outlook\\Ordnername\", vbOKOnly + vbInformation, \"amvSentMailFolders\"\r\n             strPath = GetAppSetting(\"FilePath\", App.Path & \"\\SentMailFolders.txt\", <span style=\"color:blue;\">False<\/span>)\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Dir(strPath)) = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 CreateConfigurationFile(strPath)\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             ShellExecuteA 0, \"Open\", strPath, vbNullString, vbNullString, SW_NORMAL\r\n         <span style=\"color:blue;\">Case <\/span>\"btnConfigurationFile\"\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"W&auml;hle eine neue Datei mit der Konfiguration f&uuml;r das Verschieben gesendeter Elemente aus.\", _\r\n                 vbOKOnly + vbInformation, \"amvSentMailFolders\"\r\n             strPath = ShowFileDialog(strFilePath)\r\n             <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Len<\/span>(Dir(strPath)) = 0<span style=\"color:blue;\"> Then<\/span>\r\n                 <span style=\"color:blue;\">Call<\/span> SaveAppSetting(\"FilePath\", strFilePath)\r\n             <span style=\"color:blue;\">End If<\/span>\r\n         <span style=\"color:blue;\">Case Else<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"OnAction nicht behandelt: \" & control.Id\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Die Prozedur onAction wird beim Bet&auml;tigen der Ribbonbuttons ausgel&ouml;st.<\/span><\/b><\/p>\n<p>Die Funktion unterscheidet zun&auml;chst in einer <b>Select Case<\/b>-Bedingung nach der Eigenschaft <b>id <\/b>des mit dem Parameter &uuml;bergebenen Steuerelements, was uns entweder den Wert <b>btnEditSentMailFolders <\/b>oder <b>btnConfigurationFile <\/b>liefert.<\/p>\n<p>Im ersten Fall gibt die Prozedur die bereits weiter oben beschriebene Meldung aus. Dann liest sie aus der Registry den Pfad zu der Konfigurationsdatei aus und tr&auml;gt diese in <b>strPath <\/b>ein.<\/p>\n<p>Danach wird &uuml;berpr&uuml;ft, ob die mit <b>strPath <\/b>angegebene Datei bereits vorhanden ist. Falls nicht, legt die Prozedur <b>CreateConfigurationFile <\/b>diese Datei an und ruft mit <b>ShellExecuteA <\/b>die Anwendung zur Anzeige dieser Textdatei auf, in der Regel der Windows-Editor.<\/p>\n<p>Die zweite Schaltfl&auml;che namens <b>btnConfigurationFile <\/b>zeigt ebenfalls eine Meldung mit einem Hinweis an, dass der Benutzer nun eine neue Konfigurationsdatei ausw&auml;hlen kann. Danach ruft sie mit <b>ShowFileDialog <\/b>einen Dateiauswahl-Dialog auf und speichert den Pfad zu der ausgew&auml;hlten Datei mit <b>SaveAppSetting <\/b>in der Registry.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Die &uuml;brigen Routinen, welche die eigentlichen Funktionen dieses COM-Add-Ins bereitstellen, haben wir bereits im Artikel <b>Outlook: Mails nach dem Senden per VBA verschieben <\/b>(<b>www.vbentwickler.de\/440<\/b>) beschrieben. Daher wollen wir diese nicht nochmals beschreiben und verweisen auf diesen Artikel.<\/p>\n<p>Es gibt noch gen&uuml;gend Erweiterungsm&ouml;glichkeiten. Wir k&ouml;nnen beispielsweise noch weitere Bedingungen hinzuf&uuml;gen. Bisher verwenden wir nur die E-Mail-Adresse des Empf&auml;ngers als Bedingung zum Verschieben ein einen anderen Ordner.<\/p>\n<p>Man k&ouml;nnte aber genauso festlegen, dass der Betreff der E-Mail nach bestimmten Schl&uuml;sselw&ouml;rtern untersucht werden soll und die gesendete E-Mail im Falle eines Treffers in einen entsprechenden Ordner verschoben werden soll.<\/p>\n<p>Dies k&ouml;nnte man einfach in der Prozedur <b>objItems_ItemAdd <\/b>einf&uuml;gen, indem man dort weitere <b>If&#8230;Then<\/b>-Bedingungen hinzu programmiert.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In einem anderen Artikel namens &#8220;Outlook: Mails nach dem Senden per VBA verschieben&#8221; (www.vbentwickler.de\/440) haben wir die grundlegenden Techniken gezeigt, mit denen wir E-Mails, die wir selbst versendet haben, nicht in den Ordner Gesendete Elemente verschieben, sondern in einen Ordner unserer Wahl. Damit k&ouml;nnen wir einfach E-Mails in bestimmten Kontexten direkt in einen Ordner verschieben, wo auch die &uuml;brigen E-Mails zu diesem Thema landen. Eigentlich l&auml;uft diese Funktion automatisch und bedarf keiner Benutzer-Interaktion, aber wir ben&ouml;tigen eine M&ouml;glichkeit, die Regeln f&uuml;r das Verschieben der E-Mails zu definieren. Dazu haben wir eine Textdatei benutzt, die wir f&uuml;r den Benutzer auf einfachem Wege zug&auml;nglich machen wollen, zum Beispiel durch das Anklicken eines Ribbonbuttons. Dazu verwenden wir ein COM-Add-In, dem wir auch noch die eigentliche Funktion hinzuf&uuml;gen &#8211; und noch ein paar Extras. In diesem Artikel beschreiben wir, wie Du ein solches COM-Add-In mit twinBASIC ganz einfach selbst bauen kannst.<\/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":[662024,66052024,44000027,44000026],"tags":[],"yst_prominent_words":[],"class_list":["post-55000441","post","type-post","status-publish","format-standard","hentry","category-662024","category-66052024","category-Excel_programmieren","category-Outlook_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000441"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000441\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000441"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000441"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}