Я хочу добавить вложение к каждому элементу, выбранному в настоящий момент в 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 не может прикрепить файл более чем к одному элементу почты одновременно?Есть ли обходной путь?