2016-12-08 12 views
0

Использование Outlook 2016 для Windows (10).Outlook VBA - BeforeDelete не работает

Я пытаюсь написать VBA, чтобы автоматически копировать электронные письма, которые я удаляю в отдельную папку (или, возможно, переписываю «delete» только с копией).

Прежде чем я доберусь до этого момента, предварительный запрос должен получить простой скрипт VBA, созданный для захвата события delete.

Я посмотрел на MSDN и нашел следующий код, который я вставлял в объект «ThisOutlookSession».

Public WithEvents myItem As Outlook.MailItem 

Public Sub DeleteMail() 
Const strCancelEvent = "Application-defined or object-defined error" 
    On Error GoTo ErrHandler 
    Set myItem = Application.ActiveInspector.CurrentItem 
    myItem.Delete 
    Exit Sub 

ErrHandler: 
    MsgBox Err.Description 
    If Err.Description = strCancelEvent Then 
    MsgBox "The event was cancelled." 
    End If 
    'If you want to execute the next instruction 
    Resume Next 
    'Otherwise it will finish here 
End Sub 

Private Sub myItem_BeforeDelete(ByVal Item As Object, Cancel As Boolean) 
    'Prompts the user before deleting an item 
    Dim strPrompt As String 
    'Prompt the user for a response 
    strPrompt = "Are you sure you want to delete the item?" 
    If MsgBox(strPrompt, vbYesNo + vbQuestion) = vbNo Then 
    'Don't delete the item 
    Cancel = True 
    End If 
End Sub 

Однако это не работает. Когда я иду, чтобы удалить элемент (либо нажав клавишу «del» в папке «Входящие», либо открыв элемент и нажав «Удалить» на ленте), элемент перемещается в папку «Удаленные», но я не вижу окно сообщения. Это кажется относительно простым, и я не уверен, что мне не хватает.

+0

Что вызывает запуск элемента DeleteMail? Если это не так, myItem никогда не инициализируется. –

ответ

1

Похоже, что событие BeforeDelete имеет ограниченное использование, как реализовано с кодом DeleteMail.

В соответствии с этим https://msdn.microsoft.com/en-us/library/office/ff861266.aspx «Процедура DeleteMail() должна вызываться до того, как процедура события может быть вызвана Outlook».

Таким образом, ваши действия «... путем нажатия клавиши« del »в папке« Входящие »или открытия элемента и нажатия« Удалить »на ленте» недействительны.

Вы можете исследовать событие NewInspector, чтобы установить myItem, когда вы открываете элемент и событие SelectionChange для проводника.

Вы должны быть в состоянии сделать то, что хотите, с ItemAdd https://msdn.microsoft.com/en-us/library/office/ff869609.aspx в папке Deleted.

+0

Спасибо! Хотя это было не так, я смог подключиться к событию itemadd в папке удаленных элементов, чтобы сделать копию почтового элемента, поскольку он «удален». – DNadel