Страницы: 1
RSS
Удаление (очистка) вложения при использовании CDO
 
Доброго времени суток, уважаемые форумчане. Подскажите, пожалуйста, как решить данный вопрос. Вопрос вылез в конкретном примере (о сем ниже), но думаю что он более универсален. Итак, для отправки писем из Excel использую CDO, все работает правильно, но хотелось бы уточнить 1 деталь.
Код
Dim oCDOCnf As Object, oCDOMsg As Object
...
   Set oCDOMsg = CreateObject("CDO.Message")
...
       oCDOMsg.AddAttachment ThisWorkbook.Path & "\" & sFiles
3-я строка кода по ходу цикла добавляет файлы к аттачу письма (повторюсь все работает). Но вот далее по ходу цикла следующие отобранные файлы добавляются к уже имеющимся в аттаче и, естественно, в письме оказываются "лишние" файлы, предназначенные не тому получателю (при рассылке у 1-го получателя имеются только "его" файлы, а у 2-го и "его" и "чужые". Так-то понятно, что надо очистить Attachment, но как можно узнать метод, ведь после точки не показывается подсказка  8-0 . Одним словом как в подобной ситуации узнать синтаксис объекта, если после точки не показываются подсказки?
Заранее спасибо всем откликнувшимся.
 
Никак не могу подобрать (методом научного тыка) команду на очистку Attachment. Она вообще есть?
 
Доброе время суток
Цитата
OlegO написал:
но как можно узнать метод, ведь после точки не показывается подсказка
А почему должна подсказываться, если вы используете позднее связывание? Подключите явно библиотеку "Microsoft CDO for Windows 2000 Library" и изучайте, что там есть.
 
Андрей VG., я пытался по аналогии со словарем сделать раннее связывание, но не получилось. Так вообще (раннее связывание) можно сделать и как?
 
Так и не смог решить данный вопрос таким методом, как я понял нету в Attachment .Remove или чего подобного (если неправ - укажите), пришлось в каждом шаге цикла прописывать через Set, а после отправки вложения - обнулять (Set oCDOMsg = Nothing). По другому не придумалось, но работает.
 
Путь, указанный Андреем в #3, и затем View/Object Browser (F2) показывает, что свойство Attachments возвращает объект типа IBodyParts, который, в свою очередь, имеет методы Delete и DeleteAll. Так что следующие конструкции должны работать (проверьте):
Код
oCDOMsg.Attachments.Delete (1)  ' удаляем первое вложение
oCDOMsg.Attachments.DeleteAll   ' удаляем все вложения
Владимир
 
вообще-то правильнее все же обнулять именно целевой oCDOMsg, чтобы избежать в дальнейшем разных непоняток с отправками и другими свойствами письма. Каждое письмо должно сначала быть создано, потом отправлено, а потом стерто из памяти через Nothing. Игра с вложениями и свойствами одного и того же письма на целый список адресатов не самый правильный путь на мой взгляд. Или я чего-то не так понял.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Поддержу Дмитрия. Например может зависнуть адресат в Копии(CC) или Скрытой копии (BCC) .

Цитата
OlegO написал:
Одним словом как в подобной ситуации узнать синтаксис объекта, если после точки не показываются подсказки?
например вот так
https://docs.microsoft.com/en-us/previous-versions/exchange-server/exchange-10/ms526591(v%3dexchg.10)

Странно что к названию темы вопросов не возникло :-)
Изменено: БМВ - 02.06.2020 18:34:26
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Странно что к названию темы вопросов не возникло :-)
Ну извините, и правда не совсем удачно получилось с названием темы. Просто вопрос был конкретно по методу удаления вложения, но решил что можно задать немного глобальнее: про самостоятельный поиск будущих решений (имею ввиду автозавершение кода). Коль уж придуманный мною способ считают более правильным такие гуру, так уж точно не буду переделывать. ;)  Если надо поменять название, то предлагаю: Удаление (очистка) вложения при использовании CDO.
Изменено: OlegO - 02.06.2020 19:04:59
Страницы: 1
Наверх