Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Office Новый топик    Ответить
 Outlook VBA  [new]
Pantik
Member

Откуда:
Сообщений: 26
Форумчане, подскажите. Не нашел ничего по своей теме.

Пишу макрос для Outlook который по событию "NewMail" удаляет из пришедшего письма вложения определенного типа путем перебора всех вложений в письме.

Проблема в том, что вложение удаляется только если письмо выделено в списке мышкой (находится в фокусе), в противном случае он находит вложение, но не удаляет его. Как программно выделить письмо (установить на него фокус)?
15 янв 20, 14:41    [22059813]     Ответить | Цитировать Сообщить модератору
 Re: Outlook VBA  [new]
The_Prist
Member

Откуда: www.excel-vba.ru
Сообщений: 1879
Pantik,

код свой хотя бы приведите. После удаления вложений сохраняете письмо или нет? Если нет - то поведение Outlook вполне логично в этом случае.
15 янв 20, 17:42    [22060050]     Ответить | Цитировать Сообщить модератору
 Re: Outlook VBA  [new]
Pantik
Member

Откуда:
Сообщений: 26
The_Prist,

Нет, письмо не удаляю, только определенные вложения (по шаблону).

Private Sub Application_NewMail()

Dim myFolder As Outlook.MAPIFolder

Dim newit As Object

Set myFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)

Set LastItem = myFolder.Items.GetLast

Set newAttach = LastItem.Attachments

For Each newat In newAttach

    If newat.DisplayName Like "ATT000*.htm" Then
        
        newat.Delete
    
    End If
    
Next newat

End Sub
15 янв 20, 17:51    [22060064]     Ответить | Цитировать Сообщить модератору
 Re: Outlook VBA  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8302
Пальцем в небо:

lastItem.Display
15 янв 20, 18:17    [22060097]     Ответить | Цитировать Сообщить модератору
 Re: Outlook VBA  [new]
Pantik
Member

Откуда:
Сообщений: 26
Leonid Kudryavtsev,

Почти попали. Мелькает конечно открывающееся письмо, но лучше чем ничего.
Единственный косяк, письмо становится прочитанным.
Как вариант, спасибо.
15 янв 20, 18:22    [22060100]     Ответить | Цитировать Сообщить модератору
 Re: Outlook VBA  [new]
Pantik
Member

Откуда:
Сообщений: 26
Сделал так.

Private Sub Application_NewMail()

Dim myFolder As Outlook.MAPIFolder

Dim newit As Object

Set myFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)

Set LastItem = myFolder.Items.GetLast

LastItem.Display

Set newAttach = LastItem.Attachments

For Each newat In newAttach

    If newat.DisplayName Like "ATT000*.htm" Then
        
        newat.Delete
    
    End If
    
Next newat

LastItem.Close olSave

LastItem.UnRead = true

End Sub
15 янв 20, 18:41    [22060120]     Ответить | Цитировать Сообщить модератору
 Re: Outlook VBA  [new]
The_Prist
Member

Откуда: www.excel-vba.ru
Сообщений: 1879
Pantik
исьмо не удаляю
а я писал, что удаляете письмо? :) Я про вложение писал. А письмо надо сохранять после изменения(а удаление вложения это таки изменение). Попробуйте:
Set newAttach = LastItem.Attachments
For Each newat In newAttach
    If newat.DisplayName Like "ATT000*.htm" Then
        newat.Delete
        LastItem.Save
    End If
Next newat
15 янв 20, 19:48    [22060178]     Ответить | Цитировать Сообщить модератору
 Re: Outlook VBA  [new]
Pantik
Member

Откуда:
Сообщений: 26
The_Prist,

Не правильно прочитал. Да, ваш способ тоже работает. Спасибо.
16 янв 20, 18:41    [22060971]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Office Ответить