2016-10-20 11 views
1

Эти коды в ThisOutlookSession работают так, как ожидается, когда я вставляю их самостоятельно, но если я их попробую, я получаю сообщение об ошибке.Может ли Outlook обрабатывать более одного обработчика макросов/событий за раз? Могу ли я объединить 2 макроса в один?

Первый код ниже делает это так, что в любое время я ударил отправить по электронной почте, я получаю всплывающее окно с просьбой, если я хотел бы продолжать посылать:

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 

Второй ниже код делает это так, что после отправки сообщения электронной почты (как только оно попадет в мою папку), я получаю всплывающее окно с вопросом, хочу ли я печатать электронное письмо.

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_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 

Я бы хотел, чтобы окно всплыло, когда я нажал отправить И второе окно pop после отправки почты. Я пробовал вставлять оба кода целиком в ThisOutlookSession. Я получаю эту ошибку

enter image description here

Кто-нибудь есть понимание того, как я хотел бы получить эту работу, или, если это вообще возможно?

+0

Какая ошибка вы получаете? – ChrisB

+0

Привет Крис, я получаю сообщение об ошибке Compile Error: Expected: type name. Я получаю сообщение об ошибке при запуске приложения и каждый раз при попытке отправить электронное письмо после этого. –

+0

Будем надеяться, что нижеуказанные изменения будут работать для вас. Не забудьте принять ответ, если это поможет. – ChrisB

ответ

1

Я бросил ваш код в код ошибки и появилось несколько ошибок. Не волнуйся. Их легко исправить. похоже, что некоторые из исходного кода, который был на одной строке, были разделены на несколько строк и не могут быть правильно прочитаны. Попробуйте следующее:

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 

И теперь для объяснения. Далее из исходного кода на самом деле 1 строка кода:

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 

Вы можете разбить длинную строку кода через несколько строк с пробелом и подчеркивания в конце строки. Там было несколько таких областей, где отсутствовало пространство и подчеркивание. Вы можете добавить их в конец строки или переместить текст в одну строку. Я сделал немного и то, и другое.

Та же проблема, что здесь произошло:

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

Это должно быть одна строка кода. Так как в следующем будет работать, но первый является более распространенным и считается легче читать:

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

... который идентичен

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

Наконец, те части, которые не являются " subs ", например" Private Declare ... "и" Private WithEvents ... ", должны быть в верхней части скрипта, прежде всего подмножеств.

+0

благодарит Криса. Я пробовал это и получаю ошибку компиляции: после окончания функции sub, end или end могут появляться комментарии. –

+0

Я снова вставлю оригинальный код в случае, если первое не получилось правильно –

+0

Private Sub Application_ItemSend (ByVal Item As Object, Cancel As Boolean) Если MsgBox («Вы хотите продолжить отправку почты?", vbOKCancel) <> vbOK Затем Отмена = True Конец Sub –