2016-11-05 8 views
1

Я добавил код VBA в мое приложение Outlook, чтобы запустить некоторую очистку при закрытии программы. В частности, я удаляю любые электронные письма с уведомлением, автоматически создаваемые моей тестовой средой на работе.Код в Application_Quit() не работает (Outlook)

Затем я пытаюсь очистить папку для мусора, пометить электронные письма в определенной папке как прочитанные, а затем навсегда удалить все элементы из папки «Удаленные элементы». Вот код:

Private Sub Application_Quit() 

    On Error Resume Next 

    Call delete_LV_emails 
    Call mark_JIRA_read 
    Call empty_junk 
    Call empty_deleted 

End Sub 

В подлодки, что я звоню в модуле под названием «Очистка», и я знаю, что все они работают, когда я запускаю их самостоятельно. Тем не менее, вызывается только «delete_LV_emails». То есть, когда я закрываю/повторно открываю Outlook. Единственное, что произошло, это то, что автоматически создаваемые письма перемещаются в папку «Удаленные элементы». Я не могу понять, почему называется только один из подсайтов.

Если это имеет значение, то код для каждого из подлодки ниже:

Sub delete_LV_emails() 

    On Error Resume Next 

    Dim olNS As Outlook.NameSpace 
    Dim olFolder As Outlook.Folder 
    Dim olItem As Object 
    Dim arrKeys(0 To 1) As String 

    Set olNS = Application.GetNamespace("MAPI")         
    Set olFolder = olNS.GetDefaultFolder(olFolderInbox)     

    arrKeys(0) = "LabVIEW Error"             
    arrKeys(1) = "Test Complete" 

    iItemCount = olFolder.Items.Count 
    sDate = Split(Str(Now), " ")(0) 

    For iItemInd = iItemCount To 1 Step -1 
     Set olItem = olFolder.Items(iItemInd) 

     If Not Split(Str(olItem.CreationTime), " ")(0) = sDate Then GoTo NEXTITEM 

    iKeyInd = 0 

    While Not iKeyInd > 1 
     If InStr(olItem.Subject, arrKeys(iKeyInd)) Then olItem.Delete 

     iKeyInd = iKeyInd + 1 
    Wend 

NEXTITEM: 
    Next 

    Set olNS = Nothing 
    Set olFolder = Nothing 
    Set olItem = Nothing 

End Sub 

Sub empty_deleted() 

    On Error Resume Next 

    Dim olNS As Outlook.NameSpace 
    Dim olFolder As Outlook.Folder 
    Dim olItem As Object 

    Set olNS = Application.GetNamespace("MAPI") 
    Set olFolder = olNS.GetDefaultFolder(olFolderDeletedItems) 

    iItemCount = olFolder.Items.Count 

    For iItemInd = iItemCount To 1 Step -1 
     Set olItem = olFolder.Items(iItemInd) 
     olItem.Delete 
    Next 

    Set olNS = Nothing 
    Set olFolder = Nothing 
    Set olItem = Nothing 

End Sub 

Sub empty_junk() 

    On Error Resume Next 

    Dim olNS As Outlook.NameSpace 
    Dim olFolder As Outlook.Folder 
    Dim olItem As Object 

    Set olNS = Application.GetNamespace("MAPI") 
    Set olFolder = olNS.GetDefaultFolder(olFolderJunk) 

    iItemCount = olFolder.Items.Count 

    For iItemInd = iItemCount To 1 Step -1 
     Set olItem = olFolder.Items(iItemInd) 
     olItem.Delete 
    Next 

    Set olNS = Nothing 
    Set olFolder = Nothing 
    Set olItem = Nothing 

End Sub 

Sub mark_JIRA_read() 

    On Error Resume Next 

    Dim olNS As Outlook.NameSpace 
    Dim olFolder As Outlook.Folder 
    Dim olItem As Object 

    Set olNS = Application.GetNamespace("MAPI") 
    Set olFolder = olNS.GetDefaultFolder(olFolderInbox).Folders("Jira") 

    iItemCount = olFolder.Items.Count 

    For iItemInd = iItemCount To 1 Step -1 
     Set olItem = olFolder.Items(iItemInd) 
     If olItem.UnRead Then olItem.UnRead = False 
    Next 

    Set olNS = Nothing 
    Set olFolder = Nothing 
    Set olItem = Nothing 

End Sub 

Я понимаю, что это очень многословно вопрос, но если у кого есть какие-либо понять, я бы очень признателен.

Спасибо!

-Sean

+1

Удалить On Error Resume Next из кода затем запустить его снова и дайте мне знать – 0m3r

+1

@ Om3r Yep ... который работал. Итак, тогда возникает вопрос: что такое «Включение ошибки»? – detroitwilly

ответ

0

Удалить On Error Resume Next из кода затем запустить его снова

On Error Resume Next вы в основном инструктажа VBA по существу игнорировать ошибку и продолжить выполнение на следующей строке кода.

Очень важно помнить, что On Error Resume Next никоим образом не исправляет ошибку. Он просто инструктирует VBA продолжать, как если бы не произошла ошибка.

Смотреть подробнее о http://www.cpearson.com/excel/ErrorHandling.htm

+0

Спасибо за ссылку. Тем не менее, я все еще немного смущен. Если я удалю оператор «Принять сообщение об ошибке следующего», и я не получаю сообщение об ошибке из Outlook, значит, это не «On Error Resume Next», так как в первую очередь нет ошибки? – detroitwilly

+0

Да, вы сбиваете с толку код, вы хотите узнать, есть ли ошибка, а затем исправить его – 0m3r

+0

@detroitwilly. Также вы не используете его правильно. – 0m3r

0

Последние версии Outlook, не вызвать Бросить обработчик события. Они не проходят Go и не собирают 200 долларов - они просто уходят.

Вы можете посмотреть Explorer.Close и Inspector.Close события - если есть только один проводник или инспектор оставил (по данным Application.Explorers.Count и Application.Inspectors.Count), Outlook закрывается.

+0

Полезно знать, значит ли это, что мне придется создавать другого Explorer/Inspector, а затем выпустить его в конце моего кода? – detroitwilly

 Смежные вопросы

  • Нет связанных вопросов^_^