Я пытаюсь переместить электронное письмо из папки «Входящие» Outlook 2010 в подпапку папки (называемой Indidents).
Перемещение выполняется подпрограммой VBA, которой передается имя подпапки (ссылка на проблему) и ссылка на электронное письмо.
Если подпапка не существует, ее необходимо создать.
Перемещение работает, если мне нужно создать папку, но если вложенная папка уже существует, перемещение не выполняется.
Вот мой код:
Sub AddIncidentFolder(incident, ByRef email As Outlook.mailItem)
incidentDir = "Incidents"
Dim myNameSpace As Outlook.NameSpace
Dim inbox As Outlook.Folder
' Dim incidents As Outlook.Folder
Dim incidentSubFolder As Outlook.Folder
Set myNameSpace = Application.GetNamespace("MAPI")
Set inbox = myNameSpace.GetDefaultFolder(olFolderInbox)
MsgBox "Selecting " & incidentDir & " folder"
Set incidents = inbox.Folders.item(incidentDir)
MsgBox "Selecting " & incident & " sub-folder"
On Error GoTo addSubFailed
Set incidentSubFolder = incidents.Folders.Add(incident)
MsgBox "Incident sub-folder set to " & incidentSubFolder
On Error GoTo MoveError
email.Move incidentSubFolder
Exit Sub
addSubFailed:
MsgBox "Error Creating 'Incident' folder " & incident
MsgBox "Error number: " & Err.Number _
& " " & Err.Description
Set incidentSubFolder = incidents.Folders.item(incident)
MsgBox "folder add result was " & incidentSubFolder
Resume Next
MoveError:
MsgBox "Move of email failed"
Resume Next
End Sub
Итак, идея состоит в том, что если «Добавить папку» не удается, я предполагаю, что она существует, поэтому я просто выбираю папку в addSubFailed
.
Первые 2 оператора MsgBox в addSubFailed
срабатывают, а третий нет, поэтому я предполагаю, что «Set» для подпапки вызывает дополнительную ошибку.
Я новичок в VBA, но в порядке с объектами, свойствами и т. д. Код взят из других ответов SO и документов MS, и я не вижу ничего явно неправильного.
EDIT Переменная 'incident', которую я считал строкой, на самом деле является объектом соответствия Regex из этого вызывающего кода:
For Each Match In irMatches
'MsgBox "Match is " & Match & ", value is " & Match.Value
Call addToCategory(Match, email)
Call AddIncidentFolder(Match, email)
Next
Если я изменю процедуру addSubFailed
на:
addSubFailed:
MsgBox "Error Creating 'Incident' folder " & incident
MsgBox "Error number: " & Err.Number _
& " " & Err.Description
MsgBox "Incident is " & incident
'Set incidentSubFolder = incidents.Folders(incident)
Set incidentSubFolder = incidents.Folders("INC000001509771")
MsgBox "folder is " & incidentSubFolder
Resume Next
тогда это работает, поэтому я думаю, что у меня несоответствие типов. Добавление `As String' к параметру 'incident' дает мне ошибку несоответствия типа во время выполнения.
Заранее благодарю за любую помощь.
Debug.Print
раздражает меньше, чемMsgBox
24.07.2019Dim
(для явной установки типа переменной?) иSet
24.07.2019Dim
для объявления переменной. Ключевые словаSet
и (совершенно необязательные)Let
предназначены для присвоения значения переменной. Также см.. Перейдите к опциям VBA IDE и включите «Требовать объявление переменной» и отключите автоматическую проверку синтаксиса. ДобавьтеOption Explicit
первой строкой ко всем модулям, в которых ее еще нет. Поблагодаришь меня позже. ;) 24.07.2019