Изменить выбранный элемент на следующий или предыдущий - PullRequest
1 голос
/ 09 июня 2009

Я написал код ниже, который очень похож на принятый ответ здесь . Он помечает электронные письма и ответы на собрания как прочитанные и перемещает их в архив.

Я сортирую свою почту по новинкам сверху. После использования макроса выбор по умолчанию переходит к следующему электронному письму (старому). Я хочу, чтобы он перешел к следующему письму (более новому). Если я переверну порядок сортировки писем, то это сработает так, как я хочу. Я посвятил этому слишком много времени, чтобы просто изменить порядок сортировки моих электронных писем.

Я попытался установить для 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

Ответы [ 4 ]

2 голосов
/ 19 января 2013

Вставьте в свой код одну из двух строк кода SendKeys из одного из следующих двух макросов, чтобы Outlook изменил выбор в области списка элементов Outlook на сообщение выше или ниже активного сообщения. Элемент сообщения электронной почты, из которого вы перемещаетесь вверх или вниз, должен быть активным на панели «Список элементов» в приложении Outlook до выполнения кода SendKeys. При необходимости добавьте временную задержку в свой код, чтобы дать время для того, чтобы соответствующее сообщение стало активным в Outlook перед выполнением кода SendKeys. Эти макросы также можно добавить на ленту в Outlook 2010 для создания кнопок со стрелками вверх и вниз для навигации в области списка элементов Outlook.

- Sub MoveUp ()

SendKeys "{UP}": DoEvents

End Sub

Sub MoveDown ()

SendKeys "{Down}": DoEvents

End Sub

2 голосов
/ 09 июня 2009

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

1 голос
/ 29 августа 2011

Мне удалось добиться аналогичного эффекта с помощью функции SendKeys.

Я хотел вернуться к первому сообщению в проводнике после некоторых манипуляций с выбранными элементами.

Я только что добавил следующую строку после выполнения манипуляции:

SendKeys "{HOME}"

Это работает для меня, в данном конкретном случае, но может быть изменено для использования в другом контексте.

0 голосов
/ 15 октября 2014

Используйте clearselection и addtoselection вот так

Call e.ClearSelection
For Each itt In e.CurrentFolder.Items
    'MsgBox CStr(itt)
    If (e.IsItemSelectableInView(itt)) Then
        If itt.FullName = it.FullName Then
            Call e.AddToSelection(itt)
        End If
    End If
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...