以编程方式更改Outlook

时间:2016-12-08 00:46:05

标签: outlook-vba

我正在尝试编写一段代码,该代码从活动资源管理器中获取用户选择的项目列表(通常是mailitems),对它们执行某些操作(例如设置自定义字段的值),然后 - 当完成 - 选择资源管理器窗口中的下一个项目并在那里结束执行。

  • 我在识别所选项目列表时没有问题
  • 我可以循环浏览所选项目并在每个
  • 上执行必要的操作
  • 但是,对于我的生活,我不能弄清楚如何在完成上述过程后以编程方式选择资源管理器窗口中的 next 项目(请记住,下一项是在用户选择的项目列表中不

示例......

  • 收件箱有10个项目
  • 用户选择第1,4和7项
  • 代码将第1,4和7项标识为有效选择
  • 代码对第1,4和7项执行操作

- >完成后,我希望选择项目#8

这可能吗?

皱纹,为什么我不能在最后使用SendKeys“{DOWN}”语句:活动视图按自定义字段分组(...称之为标志,为便于参考) - 其中flag = false显示在组#1的屏幕顶部,而flag = true显示在屏幕底部的组#2中。这是一种将邮件项目降级为“地下室”的方式,不删除它们或不必将它们移动到其他文件夹中。他们留在收件箱中,但是单独分组,看不到。

对第1,4和7项执行的操作包括将标志设置为TRUE,从而使项目从屏幕的上半部分消失,并移动到屏幕的下半部分(即在组#中) 2)。这一切都很有效。

...直到代码到达选择中的最后一项,并再次执行它需要做的事情并结束......但此时,在资源管理器窗口中显示的活动/选定邮件项目是相同的last mailitem(#7)。因此,用户现在在组#2的收件箱中看到了一个mailitem。换句话说,用户现在位于收件箱的地下室,而不是顶部,因为Outlook正在显示选择中的最后一个邮件项目,该邮件项目已被代码移动到地下室。

我希望代码将活动/选定的mailitem更改为#8(对于我正在设置的自定义字段,其值仍然为FALSE),以便在完成代码执行后,屏幕位置保持在原来的位置代码执行时。

我唯一能做的就是在最后应用SendKeys“{HOME}”,所以至少用户的视图会继续显示组#1中的邮件项目......但不是正确的mailitem。< / p>

我真的很难过。

任何帮助都将不胜感激。

NB&GT;在启动代码时,我的思考过程是识别选择中的最后一个邮件项目(...通过索引#或通过EntryID) - 我可以很容易地做到这一点 - 但后来以某种方式找到了一种方法i)在紧随其后找到NEXT mailitem,并存储此引用,然后ii)完成代码后,获取outlook以选择保存参考ID的mailitem。我无法弄清楚如何做到这一点。

由于

1 个答案:

答案 0 :(得分:0)

如果收到的时间按某种顺序排列,您可以使用它来确定要选择的下一个项目。

这个过程看起来像这样。

selCount = ActiveExplorer.Selection.Count

' Assumes you select downwards not randomly
minRecTime = ActiveExplorer.Selection(selCount).ReceivedTime

物品移动后,循环向下穿过物品。

currRecTime = currFolder.items(i).ReceivedTime

If currRecTime < minRecTime Then

    Exit For

End If

现在你的职位是&#34;我&#34;。

请记住从按钮而不是VB编辑器运行以查看SendKeys的工作。

SendKeys "{HOME}"

For j = 1 To i - 1

    SendKeys "{DOWN}"

Next j