2017-01-09 1 views
0

Dies ist eine Folge zu einer previous question, die ich gefragt hatte. Danke an die Community für Ihre Hilfe.Die Variable Application_Startup verschwindet nach der Unterbearbeitung

Ich versuche WithEvents Code zum ersten Mal zu erstellen, um einen Ordner auf neue Elemente zu überprüfen. Eventueller Plan ist es, das ItemsAdd-Ereignis zu verwenden, um eine Reihe anderer Prozesse auszulösen, aber für den Moment versuche ich nur, es in einem Ordner zu speichern und nicht so weit zu kommen.

Wenn ich den Application_Startup-Code unten ausführen, zeigt das unmittelbare Fenster, dass ich das richtige ClntFldrItms gefunden habe. Problem ist, wenn ich dann ein Element in den betreffenden Ordner ziehen, wird das ItemAdd-Makro nicht ausgelöst. Wenn ich versuche, eine Überwachung für clntFldrItms hinzuzufügen, wird die Variable nicht auf nichts gesetzt. Es sieht so aus, dass sobald die Application_Startup-Sub beendet ist, die Zuweisung beendet wird.

Der gesamte Code befindet sich im ThisOutlookSession-Objekt.

Könnte das sein, weil ich mit einer SMTP-E-Mail-Adresse arbeite (anstatt zum Beispiel Exchange)?

Nochmals vielen Dank für Ihre Hilfe.

EDIT Hinzufügen meiner Antwort auf Eugene Kommentar. Ich habe bemerkt, dass, wenn ich den Editor öffne und in den Application_Startup Sub gehe, clntFlodrItms korrekt zugewiesen wird, sogar bevor ich die Zeile ClntFldritms = clntFldr.Items setze. Sobald ich fertig bin, ist es wieder weg. Ich kann nicht in das ItemAdd-Sub springen, aber wenn ich in einen anderen Code eintrete, ist ClntFldrItms Nichts.

FINAL EDIT Tut mir leid, ich weiß, ich habe vergessen, das zu schließen. Ich war nicht in der Lage, das Problem per se zu lösen, aber ich erkannte, dass es an meinem SMTP-Konto lag. Als ich es bei der Arbeit mit Exchange versuchte, funktionierte es. Es scheint, dass das Ereignis nicht ausgelöst wird, wenn ich nicht in Exchange arbeite.

Option Explicit 

Public WithEvents clntFldrItms As Outlook.Items 

Private Sub Application_Startup() 
    Dim clntFldr As MAPIFolder 
    Set clntFldr = Application.Session.GetDefaultFolder(olFolderSentMail).Folders("Client Emails") 
    Set clntFldrItms = clntFldr.Items 
    Set clntFldr = Nothing 
    Debug.Print clntFldrItms.item(1).Subject 
End Sub 

Private Sub clntFldrItms_ItemAdd(ByVal item As Object) 
    Dim bChar As String 
    bChar = "\/:*?™""® <>|.&@#_+`©~;-+=^$!,'" & Chr(34) 
    Dim saveName As String 
    If item.Class = olMail Then 
     saveName = item.Subject 
     For x = 1 To Len(bChar) 
      saveName = Replace(saveName, Mid(bChar, x, 1), "-") 
     Next x 
     item.SaveAs "C:\Users\User\Google Drive\8 - VBA work\Preparation for Assisted Responder\Sent Messages Folder\" & _ 
     saveName & ".msg", olMSG 
    End If 
End Sub 
+0

Können VBA-Makros in Outlook ausgeführt werden? Hatten Sie die Möglichkeit, die Einstellungen für das Trust Center zu überprüfen? –

+0

Dank Eugene, ich habe bereits eine Reihe von Makros in meiner Outlook-Sitzung ausgeführt. Kein Würfel ... – PKB

+0

Ich habe den Code zur Arbeit genommen und es scheint auf Outlook 2010 und Microsoft Exchange zu arbeiten, so dass das Problem für mich gelöst ist. Ich weiß nicht, ob das Problem mit Outlook 2016 oder der SMTP-E-Mail-Adresse ist, aber ich vermute letzteres. Glücklich für Ideen, aber wenn niemand hat, danke für den Versuch. Prost – PKB

Antwort

1

Versuchen Sie, einen Haltepunkt in den ItemAdd Event-Handler zu setzen und das clntFldrItms dort Objekt überprüfen, wenn der Haltepunkt erreicht wird.

Beachten Sie, das Ereignis ItemAdd wird nicht ausgelöst, wenn mehrere Elemente zur gleichen Zeit hinzugefügt wurden (mehr als 16 - das ist ein bekanntes Problem in Outlook).

Sie können den Artikel Getting Started with VBA in Outlook 2010 Artikel höllisch finden.

BEARBEITEN Die clntFldrItms wird festgelegt, da der Startup-Ereignishandler beim Starten von Outlook ausgeführt wird. Daher wird das Objekt beim Start hinter der Szene initialisiert.

+0

Vielen Dank Eugene. Ich habe das getan und von dem, was ich sehen kann, ist es richtig eingestellt. Ich habe jedoch eine interessante Sache bemerkt. Wenn ich den Editor öffne und in den Application_Startup Sub gehe, wird 'clntFlodrItms' korrekt zugewiesen, sogar bevor ich die' Set clntFlodrItms = clntFldr.Items' Zeile erreiche. Sobald ich fertig bin, ist es wieder weg. Ich kann nicht in das ItemAdd-Sub springen, aber wenn ich in den anderen Code klicke, ist "clntFldrItms" nichts. – PKB

+0

Sorry, vorzeitige Eingabe .... Irgendwelche Gedanken? – PKB

+1

Versuchen Sie, die folgende Anweisung zu entfernen: 'Set clntFldr = Nothing' –

Verwandte Themen