Добавить вложение ко всем выбранным элементам в Outlook 2016 с помощью VBA - PullRequest
0 голосов
/ 25 июня 2018

Я хочу добавить вложение к каждому элементу, выбранному в настоящий момент в Outlook 2016. Моя идея заключается в том, чтобы вызывать Attachments.Add в цикле для каждого элемента в текущем выделении.

В папке «Черновики»У меня есть три проекта с предметами:

  • Черновой тест 3
  • Черновой тест 2
  • Черновой тест 1

Из-засреда, в которой я нахожусь, я не могу использовать C #.Я использую VBA вместо этого.Я запустил весь тестовый код, нажав Разработчик > Макросы > [имя] на ленте Outlook 2016.

Я начал с этого:

Sub AddTestTxtToSelection1()
    Dim i As Long
    With Application.ActiveExplorer.Selection
        For i = .Count To 1 Step -1
            .Item(i).Attachments.Add "C:\Full\Path\To\Test.txt", olByValue, 1
        Next
    End With
End Sub

К сожалению, Test.txt был прикреплен только к черновому тесту 3, хотя были выбраны все три черновика.Я подумал, что, возможно, неправильно выполняю итерацию по выделению, поэтому я попробовал следующее:

Sub AddTestTxtToSelection2()
    For Each objMessage In Application.ActiveExplorer.Selection
        objMessage.Attachments.Add "C:\Full\Path\To\Test.txt", olByValue, 1
    Next
End Sub

Опять же, хотя были выбраны все три черновика, Test.txt был присоединен только к черновому тесту 3. В примере кодав эта статья , Application.ActiveExplorer и ее свойство Selection хранятся в отдельных переменных.Я подумал, что это могло быть тем, чего не хватало, поэтому я написал это:

Sub AddTestTxtToSelection3()
    Dim myOlExp As Explorer
    Dim myOlSel As Selection
    Set myOlExp = Application.ActiveExplorer
    Set myOlSel = myOlExp.Selection
    Dim i As Long
    For i = 1 To myOlSel.Count
        myOlSel.Item(i).Attachments.Add "C:\Full\Path\To\Test.txt", olByValue, 1
    Next
End Sub

Поведение было идентично поведению первых двух тестов.Наконец, мне пришло в голову, что проблема может заключаться в изменении черновиков, пока я их зацикливаю.Затем я написал этот код, в котором свойства EntryID выбранных элементов хранятся в отдельном строковом массиве перед их циклическим циклом:

Sub AddTestTxtToSelection4()
    Dim i As Long
    Dim strEntryID As Variant
    Dim namespaceMAPI As NameSpace
    Dim objMessage As Object
    Dim selected() As String
    ' Copy the current selection into an array of EntryID strings.
    ReDim selected(1 To Application.ActiveExplorer.Selection.Count) As String
    For i = 1 To Application.ActiveExplorer.Selection.Count
        selected(i) = Application.ActiveExplorer.Selection.Item(i).EntryID
    Next
    ' Retrieve each item from its EntryID string.
    Set namespaceMAPI = Application.GetNamespace("MAPI")
    namespaceMAPI.Logon
    For Each strEntryID In selected
        Set objMessage = namespaceMAPI.GetItemFromID(strEntryID)
        objMessage.Attachments.Add "C:\Full\Path\To\Test.txt", olByValue, 1
    Next
End Sub

Опять же, только Draft Test 3 имеет присоединенный Test.txt после выполнения этогокод.Я подумал, что в Outlook могут возникнуть проблемы с прикреплением одного и того же файла к нескольким черновикам, поэтому я изменил последний тест, чтобы прикрепить отдельный файл к каждому черновику.Только черновой тест 3 имел приложение после его выполнения.Даже если я поменяю Application.ActiveExplorer.Selection на Application.ActiveExplorer.CurrentFolder.Items, все равно только первый черновик получит вложение.

Почему Outlook не может прикрепить файл более чем к одному элементу почты одновременно?Есть ли обходной путь?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Я принял ответ @ niton, но вот мой код после добавления .Save:

' Based on AddTestTxtToSelection2
Sub AddTestTxtToSelection5()
    For Each objMessage In Application.ActiveExplorer.Selection
        objMessage.Attachments.Add "C:\Full\Path\To\Test.txt", olByValue, 1
        objMessage.Save ' This line was added.
    Next
End Sub

Вложения теперь добавляются к каждому выбранному сообщению.

0 голосов
/ 26 июня 2018

Для определенных действий требуется .Save.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...