我在Outlook的Visual Basic(我们使用的是Outlook 2003和Exchange Server)中编写了一个消息处理函数来帮助我整理收到的电子邮件。

它对我有用,除非有时规则失败并且Outlook停用它。

然后我重新打开规则并在我的收件箱中手动运行以赶上。 该规则自发地失败并且每天停用几次。

我想一劳永逸地解决这个问题。

===============>>#1 票数:11

此代码向我显示了收件箱中的不同TypeNames:

Public Sub GetTypeNamesInbox()
Dim myOlItems As Outlook.Items
Set myOlItems = application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
Dim msg As Object

For Each msg In myOlItems
    Debug.Print TypeName(msg)
    'emails are typename MailItem
    'Meeting responses are typename MeetingItem
    'Delivery receipts are typename ReportItem
Next msg

End Sub

HTH

===============>>#2 票数:3

我在其他Office应用程序中使用以下VBA代码段,其中直接引用Outlook库。

' Outlook Variables

  Dim objOutlook As Outlook.Application: Set objOutlook = New Outlook.Application
  Dim objNameSpace As Outlook.NameSpace: Set objNameSpace = objOutlook.GetNamespace("MAPI")
  Dim objFolder As MAPIFolder: Set objFolder = objNameSpace.PickFolder()
  Dim objMailItem As Outlook.MailItem

  Dim iCounter As Integer:  iCounter = objFolder.Items.Count
  Dim i As Integer

  For i = iCounter To 1 Step -1
    If TypeOf objFolder.Items(i) Is MailItem Then
      Set objMailItem = objFolder.Items(i)
      With objMailItem

等等

===============>>#3 票数:2

我的内存有点多云,但我相信MailItem不是MailItem,就像读取收据一样。 (不幸的是,证明这一点的VBA代码是在另一份工作中编写的,现在还没有。)

我也编写了代码来处理传入的消息,可能是出于同样的原因(Exchange的规则太多,或规则向导的规则太复杂),并且似乎回想起遇到的问题,有些项似乎来自不同的类型,即使我用你所写的东西捕捉他们。

如果有帮助的话,我会看看是否可以制作一个具体的例子。

===============>>#4 票数:2

在Outlook的Visual Basic中编写了一个消息处理函数(我们使用的是Outlook 2003和Exchange Server)来帮助我整理收到的电子邮件。 它对我有用,除非有时规则失败并且Outlook停用它。 然后我重新打开规则并在我的收件箱中手动运行以赶上。 该规则自发地失败并且每天停用几次。 我想一劳永逸地解决这个问题。

这是剥离了功能的代码,但是让您了解它的外观:

   Public WithEvents myOlItems As Outlook.Items

   Public Sub Application_Startup()
       ' Reference the items in the Inbox. Because myOlItems is declared
       ' "WithEvents" the ItemAdd event will fire below.
       ' Set myOlItems = Outlook.Session.GetDefaultFolder(olFolderInbox).Items
       Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items
   End Sub

   Private Sub myOlItems_ItemAdd(ByVal Item As Object)
       On Error Resume Next
       If TypeName(Item) = "MailItem" Then
           MyMessageHandler Item
       End If
   End Sub

   Public Sub MyMessageHandler(ByRef Item As MailItem)
       Dim strSender As String
       Dim strSubject As String

       If TypeName(Item) <> "MailItem" Then
           Exit Sub
       End If

       strSender = LCase(Item.SenderEmailAddress)
       strSubject = Item.Subject

       rem do stuff
       rem do stuff
       rem do stuff
   End Sub

我得到的一个错误是“类型不匹配”调用MyMessageHandler,其中VB抱怨Item不是MailItem。 好的,但是TypeName(Item)返回“MailItem”,那么Item怎么不是MailItem?

我得到的另一个是带有空主题的电子邮件。 这条线

strSubject = Item.Subject

给了我一个错误。 我知道Item.Subject应该是空白的,但为什么这是一个错误?

谢谢。

===============>>#5 票数:1

默认收件箱中可以看到许多类型的项目。

在被调用的过程中,将传入的项目分配给Object类型变量。 然后使用TypeOfTypeName确定它是否是MailItem 只有这样,您的代码才能执行适用于电子邮件的操作。

Dim obj As Object

If TypeName(obj) = "MailItem" Then
  ' your code for mail items here
End If

===============>>#6 票数:1

Dim objInboxFolder As MAPIFolder
Dim oItem As MailItem
Set objInboxFolder = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)

For Each Item In objInboxFolder.Items
    If TypeName(Item) = "MailItem" Then
    Set oItem = Item

next

===============>>#7 票数:0

为什么不为代码使用简单的错误处理程序? 认真。 您可以为每次读取似乎失败的属性或对象写入错误。 然后有它简历无论如何。 无需复杂的错误处理。 想象一下显示空主题的测试。 由于您不知道它将返回什么值,如果有,并且它似乎在空或空白主题上出错,您需要将其描述为可能出错的简单测试。 将测试作为if语句运行(无论如何都会出现错误),并在程序恢复时出错。

On Error Resume Next
If object.subject = Null 'produces an error when subject is null, otherwise allows a good read
  strSubject = ""   'sets the subject grab string to a null or empty string as a string
Else
 strSubject = object.subject 'Sets the subject grab string to the subject of the message\item
End If

  ask by translate from so

未解决问题?本站智能推荐:

1回复

无法在MailItem上设置属性

我已经设置了一条规则,以对任何以“ Test1”为主题的东西运行yuno (设置完成后,我重新启动了): 我的代码如下所示: 收到以“ Test1”为主题的电子邮件时,将打印“ YU NO”,但在Outlook中不会收到红色的小标记。 Degustaf表示此代码将在此处正确标记该
2回复

VBA Outlook函数MailItem.To为空白(空)

问题是当用户不填写对象.To并使其空白时,如何绕过标准的Outlook检查功能。 我用于发送电子邮件VBA代码,因此如果对象.To为空,则会收到错误调试消息。 我的目标是创建用于检查对象.To为空的函数,以避免VBA调试错误和显示消息框,停止VBA脚本,直到正确填充对象.To。
1回复

Outlook mailitem缺少空白的ConversationIndex和ConversationID

我有一些直到最近才使用mailitem ConversationIndex跟踪电子邮件的代码。 突然所有的邮件项目都被创建为空白索引和ID。 输出空白!!! 有什么想法我搞砸了吗?
1回复

显示mailitem会生成运行时错误-2147467259

如果对话ID与请求相同,我将遍历MailItem集合以显示MailItem。 但是, 看来 ,当搜索的项目不在ActiveSelection上并且调用MailItem.Display函数时,它会产生“运行时错误-2147467259” Outlook无法执行此操作,因为已打开一个
4回复

在outlook中永久删除mailitem

我正在尝试使用outlook API删除mailitem。 如下, 显然,立即删除项目很简单。 Outlook只是将其移动到“已删除邮件”文件夹而不是删除它。 我试图使用“删除项目”文件夹 并再次删除邮件,但代码正在处理的PST不是默认邮箱,返回的文件夹是错误的已删除邮件文
3回复

当Outlook加载以打开Outlook上次关闭时打开的所有电子邮件

我想在打开Outlook时重新打开昨晚关闭时打开的所有电子邮件。 我到处都看过了,试图挖掘对象以查找消息iD,但到目前为止失败了。 这将是很好,如果他们可以是VBAModule, ThisOutlookSession被称为Application_Quit()和Application_
2回复

MailItem第一次修改时间

我想捕获创建电子邮件后首先对其进行修改的日期和时间(例如,添加了类别标签)。 是否可以向MailItem object添加FirstModificationTime属性-与现有的LastModificationTime类似? 怎么做? 任何帮助将不胜感激。
1回复

mailitem循环中的类型不匹配

Outlook 2010 VBA。 尝试在我所有的文件夹中搜索已标记的邮件。 创建此: 结束子 问题是我的收件箱中有744个项目,它通过8或9,然后给我一个“类型不匹配”。 当我调试时,它标记为“ Next olItem”,当我检查“ olItem”的值时,它将解析为“ no
1回复

Outlook VBA MailItem驼峰式

我正在尝试在Outlook 2013中的vba中定义MailItem变量。但是,每次我输入Dim mail AS MailItem时 , MailItem都会更新为mailItem 。 据我了解,这不是正确的类型。 当我尝试MsgBox TypeName(mail)时 ,它显示Nothing
1回复

调整MailItem中粘贴的JPEG的大小

我正在尝试从Excel工作表发送图片,但是尺寸很小。 如何获得合适的尺寸(基本上是整个屏幕)? 这是代码: