Страницы: 1
RSS
VBA Excel+Outlook 2013. Ошибка при отправке сохраненных писем.
 
Добрый день.

Есть необходимость из Excel осуществлять отправку ранее сохраненных писем (папка "Черновики"). Код отправки см. ниже. Код работает, НО если перед отпавкой в Оутлуке открыть папку Черновики и выбрать любое сообщение (не открыть, а просто "встать" на него), то часть писем не отправиться и при отправке будет выдана ошибка: Run-time error ... "Этот метод нельзя использовать со встроенным элементом отправки почты".
Что это значит? Почему так происходит? И как это можно победить?

Код
Sub SendSaved()
    Dim oOutApp As Outlook.Application
    Dim oNamespace As Outlook.Namespace
    Dim oFolder As Outlook.MAPIFolder
    Dim oMail As Outlook.MailItem
    Dim i As Long
    
    Set oOutApp = GetObject(, "Outlook.Application")
    Set oNamespace = oOutApp.GetNamespace("MAPI")
    Set oFolder = oNamespace.GetDefaultFolder(olFolderDrafts)
    
    For i = 1 To oFolder.Items.Count
        Set oMail = oFolder.Items.Item(i)
         oMail.Send
        Set oMail = Nothing
    Next

    Set oFolder = Nothing
    Set oNamespace = Nothing
    Set oOutApp = Nothing
End Sub

Заранее, большое спасибо!
Изменено: AnSo - 20.03.2017 11:19:20
 
Использование цикла:
Код
For Each oMail In oFolder.Items

не помогает.

 
К сожалению, не более чем догадки.
По идее, наличие курсора на строке с этим сообщением никак влиять не должно.
Может, дело не в том?
Черновик может быть не готов к отправке (например, не введен адресат: куда машине его отправить?)
Какая-то из таких ситуаций может вызвать ошибку, при этом макрос прервется и не отправятся все остальные, которые были не отправлены на момент обработки этого, сообщения.
Изменено: PerfectVam - 20.03.2017 14:19:55
Следствие из третьего закона Чизхолма:
"Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
 
1. Попробуйте делать цикл с конца:
Код
For i = oFolder.Items.Count To 1
        Set oMail = oFolder.Items.Item(i)
         oMail.Send
        Set oMail = Nothing
    Next
2. Вполне возможно, что при выделении письма включается предпросмотр письма, который блокирует доступ к нему на отправку.
Самому повторить не удалось, поэтому тоже только догадки.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Большое спасибо всем откликнувшимся!
Цитата
PerfectVam написал: Черновик может быть не готов к отправке
с письмами точно все впорядке.

Цитата
The_Prist написал: Вполне возможно, что при выделении письма включается предпросмотр письма
Вы правы область чтения включена и насколько я понимаю это и есть причина, поскольку если Область чтения выключить, то письма уходят без ошибок.
Но область чтения должна быть включена (для выборочного контроля писем и содержания перед отправкой).

Как же можно победить данную проблему?

Мне видятся два варианта:
1. На время отправки как-то выключить обновление Области чтения
2. Перед отправкой сделать активной другую папку, например Отправленные.
Но как их реализовать, я пока не нашел :(

Если знаете как, поделитесь плиз. Или если есть еще варианты, буду рад их услышать.

Спасибо.
 
Цитата
AnSo написал:
Перед отправкой сделать активной другую папку
Код
Set Application.ActiveExplorer.CurrentFolder = oNamespace.GetDefaultFolder(olFolderInbox)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, это то что нужно. Вопрос решен.

Большое спасибо за помощь!
Страницы: 1
Читают тему
Наверх