vba - Outlook 在电子邮件线程中获取其他电子邮件--UniqueBody

标签 vba outlook

我正在使用 VBA 在发送之前以某种方式格式化所有出站电子邮件。例如,我想从嵌入在电子邮件中的所有表中删除第一列。我使用以下代码:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim wd As Word.Document
    Set wd = ActiveInspector.WordEditor
    Dim tb As Word.Table
    For Each tb In wd.Tables
        tb.Columns(1).Delete
    Next tb
End Sub

上面的代码完美运行。但是,问题是我只想格式化我的电子邮件文本。通常,我会回复或转发其他人的电子邮件,这意味着前一封电子邮件的文本将位于同一个 Inspector 窗口中。我不想格式化文本/图像/等。线程中以前的电子邮件。如何做到这一点?

我知道线程中的每封电子邮件——尽管它们都在同一个窗口中——都是一个单独的单元。我知道这一点是因为在阅读作为线程一部分的电子邮件时,当您移动鼠标时,您会看到

enter image description here

在屏幕右侧,指示线程的下一部分在哪里。在撰写作为线程一部分的新电子邮件(回复或转发)时,不会显示上述按钮,但您仍会看到一条蓝色水平线将线程的不同部分彼此分开。

我在想,也许我可以搜索电子邮件中第一次出现的行,并且只应用格式直到那一点。但是,该行似乎并不是真正的文本或任何正常意义上可搜索的常规范式。事实上,如果您复制电子邮件文本(在发送之前),然后粘贴到 Word 中,该行就会消失。

有什么建议?
谢谢!

更新

我的问题与 2010 及更高版本中的“对话 View ”无关。
Outlook 2010 允许您查看一组线程中的其他电子邮件。但是,我想要的是能够(通过代码)在同一电子邮件中的线程中循环发送电子邮件。因此,如果有一封电子邮件“a”,然后是回复“b”,然后是另一个回复“c”,那么 c 也将在其下方包含 b,然后在其下方包含 a,所有这些都在同一电子邮件中。在伪代码中,我想要以下内容:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim wd As Word.Document
    Dim smail as SubEmail
    Dim tb As Word.Table
    Set wd = ActiveInspector.WordEditor
    For Each smail in wd
        For Each tb In wd.Tables
            tb.Columns(1).Delete
        Next tb
        Exit For
    Next smail
End Sub

更新

我在 Exchange Web 服务中发现了一个类似的功能,称为 UniqueBody。见 here .这正是我正在寻找的,而不是 Exchange。

最佳答案

为什么不直接查找 "From:"chr(13) "Sent:"? Outlook 会将这些标签放在任何电子邮件中,无论它来自何处。

假设上面示例中的电子邮件 a、b、c 的整个正文都在 sBody 中:

Sub GetFirstThread()
    Dim olItem As Outlook.MailItem
    Dim sText As String

    Set olItem = ActiveExplorer.Selection.Item(1)
    sBody = olItem.Body
    i=1
    While i < Len(sBody)
        If Asc(Mid(sBody, i, 1)) = 13 Then 'Look for From:
            If Mid(sBody, i + 1, 5) = "From:" Then
                'we found the start of email b
                nPosEb = i
            End If
        End If
        i=i+1
    Wend
     '...do something with nPosEb
End Sub

关于vba - Outlook 在电子邮件线程中获取其他电子邮件--UniqueBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16472344/

相关文章:

vba - 制作一个要求一天的 Excel 宏,然后将其插入到下一个打开的单元格中

c++ - 获取已发送邮件的附件数量

html - Powershell 更改 RTF 文档并另存为 RTF 文档

scripting - 如何使用Powershell监视命令的特定收件箱?

javascript - 下载文件;使用 .execScript VBA 执行 JavaScript 函数

vba - 在 VBA 中遍历对象浏览器

excel - Excel 中的 map : How can you highlight a geographic area by selecting its name from a dropdown menu?

javascript - 无法从 Outlook 功能区打开链接是 javascript API 而不是弹出窗口

c++ - 每台机器安装 mapi 自定义表单服务器(基于消息)

excel - 动态创建的表单控件标签上的 MouseMove 事件