Я написал код ниже, который очень похож на принятый ответ здесь . Он помечает электронные письма и ответы на собрания как прочитанные и перемещает их в архив.
Я сортирую свою почту по новинкам сверху. После использования макроса выбор по умолчанию переходит к следующему электронному письму (старому). Я хочу, чтобы он перешел к следующему письму (более новому). Если я переверну порядок сортировки писем, то это сработает так, как я хочу. Я посвятил этому слишком много времени, чтобы просто изменить порядок сортировки моих электронных писем.
Я попытался установить для MailItem значение Application.ActiveExplorer.CurrentFolder.Items.GetNext, а затем использовать MailItem.Display. Это открывает, а не меняет выбор, не знает текущий выбор, не может понять, что считается «следующим».
Я попытался установить свойство Application.ActiveExplorer.Selection.Item. Я прошел через (MSDN и Эксперт sexchange ) в поисках решения.
Sub MoveToArchive()
On Error Resume Next
Dim objFolder As Outlook.MAPIFolder
Dim objNS As Outlook.NameSpace, objItem As Outlook.MailItem
Dim objMRItem As Outlook.MeetingItem
Set objNS = Application.GetNamespace("MAPI")
Set objFolder = objNS.Folders("Archive").Folders("Inbox")
If Application.ActiveExplorer.Selection.Count = 0 Then
Exit Sub
End If
For Each objItem In Application.ActiveExplorer.Selection
If objFolder.DefaultItemType = olMailItem Then
If objItem.Class = olMail Then
objItem.UnRead = False
objItem.Move objFolder
End If
End If
Next
For Each objMRItem In Application.ActiveExplorer.Selection
If objFolder.DefaultItemType = olMailItem Then
If objItem.Class = olMeetingResponsePositive Or olMeetingResponseNegative Or olMeetingResponseTentative Then
objMRItem.UnRead = False
objMRItem.Move objFolder
End If
End If
Next
Set objItem = Nothing
Set objMRItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
End Sub