将所选项目更改为下一个或上一个

时间:2009-06-08 20:38:14

标签: vba outlook outlook-vba

我在下面编写的代码与accepted answer here非常相似。它将电子邮件和会议响应标记为已读并将其移至存档。

我最新的邮件排序。使用宏后,选择默认为下一封电子邮件(旧邮件)。我希望它移动到下一个电子邮件(较新的)。如果我颠倒了电子邮件的排序顺序,那么它的工作方式就是我想要的。我花了太多时间来反驳我的电子邮件的排序顺序。

我尝试将MailItem设置为Application.ActiveExplorer.CurrentFolder.Items.GetNext,然后使用MailItem.Display。这打开而不是更改选择,不知道当前选择,无法弄清楚什么被认为是“下一步”。

我尝试设置Application.ActiveExplorer.Selection.Item属性。我一直在寻找解决方案(MSDN和Expert 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

5 个答案:

答案 0 :(得分:2)

Outlook无法以编程方式在“资源管理器”窗口中选择特定项目。 所以你可以这样做。我认为你可以做到的唯一方法是以编程方式按工具栏或菜单上的上一个键。或重新设计应用程序以在检查员等中存档。

答案 1 :(得分:2)

从以下两个宏之一插入代码中的两行SendKeys代码之一,以使Outlook将Outlook项目列表窗格中的选择更改为活动邮件上方或下方的邮件。在执行SendKeys代码之前,您正在向上或向下移动的电子邮件项必须在Outlook应用程序的“项目列表”窗格中处于活动状态。如果需要,在代码中添加一个时间延迟,以便在执行SendKeys代码之前有时间让相应的消息在Outlook中变为活动状态。这些宏也可以添加到Outlook 2010的功能区中,以创建向上和向下箭头按钮以在Outlook项目列表窗格中导航。

- Sub MoveUp()

SendKeys“{UP}”:DoEvents

End Sub

Sub MoveDown()

SendKeys“{Down}”:DoEvents

End Sub

答案 2 :(得分:1)

通过使用SendKeys功能,我能够达到类似的效果。

我想在对所选项目进行一些操作之后返回到资源管理器中的第一条消息。

我在操作完成后添加了以下行:

SendKeys "{HOME}"

这适用于我,在这种特殊情况下,但可以修改为在其他情况下使用。

答案 3 :(得分:0)

像这样使用clearselectionaddtoselection

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

答案 4 :(得分:0)

我发现最好的方法是使用发送键作为标准键盘快捷键

<块引用>

切换到下一条打开的消息:Ctrl+句号 (.)

切换到上一条打开的消息:Ctrl+逗号 (,)

所以,以下之一:

SendKeys "^."
SendKeys "^,"