Sub MoveItems() 
    Dim Messages As Selection 
    Dim Msg As MailItem 
    Dim NS As NameSpace 
    Set NS = Application.GetNamespace("MAPI") 
    Set Messages = ActiveExplorer.Selection 
    If Messages.Count = 0 Then
      Exit Sub 
    End If 
    For Each Msg In Messages 
      Msg.Move NS.Folders("Personal Folders").Folders("SavedMail") 
    Next
End Sub 

Этот код переместит все сообщения электронной почты из текущей выбранной папки в Outlook в другую папку (SavedMail). Я хотел бы отредактировать код таким образом, чтобы вместо использования текущей выбранной папки в качестве источника сообщений была бы жестко закодированная папка - что-то вроде Set Messages = NS.Folders("Personal Folders").Folders("Moved") .

Я новичок в VBA и пытался просто заменить строку «Set Messages» на эту, что привело к ошибке времени выполнения «13»: несоответствие типов, которое, я думаю, относится к несоответствию команд Dim Messages и Set Messages. Я попытался использовать различные определения Dim без удачи. Я предполагаю, что тот, кто знает VBA, увидит способ сделать это прямо сейчас.

1 ответ1

1

Я думаю, что проблема, с которой вы сталкиваетесь, заключается в

If messages.count = 0 then

Определив messages как папку, вы не можете их посчитать - он хочет посчитать выборку почтовых отправлений. Если вам не нужно обрабатывать подобные ошибки, вы можете сократить код следующим образом:

Sub MoveItems() 
    Dim Msg As MailItem 
    Dim NS As NameSpace 
    Set NS = Application.GetNamespace("MAPI") 
    For Each Msg In NS.Folders("Personal Folders").Folders("Moved").Items
      Msg.Move NS.Folders("Personal Folders").Folders("SavedMail") 
    Next
End Sub 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .