2016-10-20 2 views
1

Diese Codes, in ThisOutlookSession, funktionieren wie erwartet, wenn ich sie selbst einfügen, aber wenn ich sie zusammen versuche, erhalte ich einen Fehler.Kann Outlook mehrere Makros/Ereignishandler gleichzeitig verarbeiten? Kann ich 2 Makros zu einem kombinieren?

Der erste Code macht es unten so, dass jedes Mal, wenn ich auf eine E-Mail senden getroffen, ich ein Popup-Fenster gefragt, ob ich das Senden fortsetzen möchte:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) 
    If MsgBox("Do you want to continue sending the mail?", vbOKCancel) <> vbOK Then 
     Cancel = True 
End Sub 

Der zweite Code macht es unten, so dass Sobald eine E-Mail gesendet wurde (sobald sie in meinen gesendeten Ordner gelangt), erhalte ich ein Popup, in dem ich gefragt werde, ob ich die E-Mail ausdrucken möchte.

Ich möchte das Fenster Pop haben, wenn ich sende UND das zweite Fenster Pop nachdem die Mail gesendet wird. Ich habe versucht, beide Codes in ihrer Gesamtheit in ThisOutlookSession einzufügen. Ich erhalte diesen Fehler

enter image description here

Hat jemand einen Einblick, wie ich bekommen würde dies funktioniert, oder ob dies überhaupt möglich?

+0

Welchen Fehler bekommen Sie? – ChrisB

+0

Hallo Chris, ich bekomme einen Fehler, der Compile Error sagt: Erwartet: Typ Name. Ich bekomme den Fehler, wenn die Anwendung gestartet wird, und jedes Mal, wenn ich versuche, eine E-Mail danach zu senden. –

+0

Hoffentlich funktionieren die Änderungen unten für Sie. Vergiss nicht, die Antwort zu akzeptieren, wenn es hilft. – ChrisB

Antwort

1

Ich legte Ihren Code in einen Codefehler und ein paar Fehler tauchte auf. Mach dir keine Sorgen. Sie sind einfach zu reparieren. Es sieht so aus, als wäre der ursprüngliche Code in einer Zeile in mehrere Zeilen aufgeteilt und kann nicht richtig gelesen werden. Versuchen Sie dies:

Private Declare Function ShellExecute Lib "shell32.dll" Alias _ 
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _ 
    ByVal lpFile As String, ByVal lpParameters As String, _ 
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 

Private WithEvents Items As Outlook.Items 


Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) 
    If MsgBox("Do you want to continue sending the mail?", vbOKCancel) <> vbOK Then 
     Cancel = True 
    End If 
End Sub 



Private Sub Application_Startup() 
    Dim Ns As Outlook.NameSpace 
    Dim Folder As Outlook.MAPIFolder 
    Set Ns = Application.GetNamespace("MAPI") 
    Set Folder = Ns.GetDefaultFolder(olFolderSentMail) 
    Set Items = Folder.Items 
End Sub 

Private Sub Items_ItemAdd(ByVal Item As Object) 
    If TypeOf Item Is Outlook.MailItem Then 
     If MsgBox("Print email?", vbYesNo Or vbQuestion) = vbYes _ 
      Then 
      Item.PrintOut 
     End If 
    End If 

End Sub 

Und jetzt für die Erklärung. Die folgende von Ihrem ursprünglichen Code ist eigentlich 1 Codezeile:

Private Declare Function ShellExecute Lib "shell32.dll" Alias _ 
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As 
String, _ 
ByVal lpFile As String, ByVal lpParameters As String, _ 
ByVal lpDirectory As String, ByVal nShowCmd As Long) As 
Long 

Sie können über mehrere Zeilen mit einem Raum und einem Unterstrich am Ende einer Zeile eine lange Codezeile aufgeteilt. Es gab ein paar Bereiche wie diese, wo der Platz und die Unterstreichung fehlten. Sie können sie am Ende der Zeile hinzufügen oder den Text in eine Zeile verschieben. Ich habe ein wenig von beidem gemacht.

Das gleiche Problem ist hier passiert:

If MsgBox("Print email?", vbYesNo Or vbQuestion) = vbYes 
Then 

Diese eine Zeile Code sein muss. Also beide der folgenden funktionieren werden, aber die erste ist häufiger und als leichter zu lesen:

If MsgBox("Print email?", vbYesNo Or vbQuestion) = vbYes Then 

..., die zu

If MsgBox("Print email?", vbYesNo Or vbQuestion) = vbYes _ 
Then 

Schließlich identisch ist, die Teile, die nicht " Subs ", wie" Private Declare ... "und" Private WithEvents ... "müssen oben im Skript stehen, vor allem die Subs.

+0

danke Chris. Ich habe das ausprobiert und bekomme Kompilierfehler: nur Kommentare können nach End-Sub, End-Funktion oder End-Eigenschaft erscheinen. –

+0

Ich werde den ursprünglichen Code wieder einfügen, falls der erste nicht richtig kam –

+0

Private Sub Application_ItemSend (ByVal Artikel als Objekt, Abbrechen als Boolean) Wenn MsgBox ("Möchten Sie weiterhin die Mail senden?", vbOKCancel) <> vbOK Dann Abbrechen = Wahr End Sub –

Verwandte Themen