Удаление вложения с известным соглашением об именах в электронной почте Outlook - PullRequest
0 голосов
/ 07 февраля 2020

В Microsoft Outlook 365 (V1912) я пытаюсь удалить одно вложение из набора файлов, которые были вложены из сценария VBA, который присоединяет все файлы .PDF в указанном каталоге.

Когда я пытаюсь запустить свой сценарий, я получаю сообщение об ошибке, о которой я знаю, что она не указана / не используется правильный синтаксис.

Недопустимый вызов процедуры или аргумент

Я исследовал и перепробовал все виды исправлений, но информация, которую я могу найти, предназначена либо для Excel, либо для предложений по извлечению всех вложений из электронного письма.

Dim JobLocation As String

ClientDirectory = "C:\ClientDirectory\" & JobLocation & "\Files\"
RequiredPDFs = Dir(ClientDirectory & "*.pdf")
Do While Len(RequiredPDFs) > 0
    .Attachments.Add ClientDirectory & RequiredPDFs
    RequiredPDFs = Dir
Loop

For i = 0 To (.Attachments.Count - 1)
    If InStr(1, .Attachments, JobLocation & "_SM ") Then
        .Attachments.Remove 1
    End If
Next i

Первая половина кода перебирает все файлы в каталоге и присоединяет их.

Существует один файл с соглашением об именах JobLocation_SM 1234, который я не хочу ни прикреплять, ни удалять после присоединения всех других файлов, если файл существует в каталоге.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Во-первых, вы жестко кодируете индекс 1 вместо i при вызове Attachments.Remove.

Во-вторых, все коллекции в Outlook основаны на 1, а не на 0.

В-третьих, если их несколько соответствует, l oop не будет работать, так как вы изменяете (удаляя) коллекцию, над которой вы зацикливаетесь. Используйте вниз l oop:

For i = .Attachments.Count to 1 step -1

В-четвертых, почему вы удаляете вложения после их добавления? Не будет ли проще избежать их добавления?

В-пятых, вы не обращаетесь к объекту Attachment в своем цикле;

For i = .Attachments.Count to 1 step -1
   set attach = .Attachments.Item(i)
   If InStr(1, attach.FileName, JobLocation & "_SM ") Then
     attach.Delete
   End If
Next i
0 голосов
/ 07 февраля 2020

Попробуйте это:

Dim att

For Each att in .Attachments
    If InStr(1, att.FileName, JobLocation & "_SM ") > 0 Then
        att.Delete
        Exit For
    End If
Next 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...