Vba 搜索电子邮件以查找并突出显示文本

Vba 搜索电子邮件以查找并突出显示文本,vba,email,excel,outlook,Vba,Email,Excel,Outlook,我正在使用Excel的VBA尝试自动发送一些电子邮件。现在,代码基于单击按钮旁边的单元格创建电子邮件,将电子邮件转发到单元格中列出的,然后基于更多单元格插入特定的正文消息。单元格中的内容并不重要,但我需要做的是搜索原始转发消息中的特定文本,如果找到,则需要突出显示该文本 我的代码如下: Sub Asset_email() Dim olApp As Outlook.Application Dim olNs As Namespace Dim Fldr As MAPIFolder Dim olMail

我正在使用Excel的VBA尝试自动发送一些电子邮件。现在,代码基于单击按钮旁边的单元格创建电子邮件,将电子邮件转发到单元格中列出的,然后基于更多单元格插入特定的正文消息。单元格中的内容并不重要,但我需要做的是搜索原始转发消息中的特定文本,如果找到,则需要突出显示该文本

我的代码如下:

Sub Asset_email()
Dim olApp As Outlook.Application
Dim olNs As Namespace
Dim Fldr As MAPIFolder
Dim olMail As Outlook.MailItem
Dim i As Integer
Dim olMsg As Outlook.MailItem
Dim r As Range
Dim strLocation As String
Dim o As Outlook.Application
Dim strbody As String

'Dim olAtt As Outlook.Attachments
'Set olAtt = olMsg.Attachments

Set r = ActiveSheet.Buttons(Application.Caller).TopLeftCell
Range(Cells(r.Row, r.Column), Cells(r.Row, r.Column)).Select

Set olApp = New Outlook.Application
Set olNs = olApp.GetNamespace("MAPI")
Set Fldr = olNs.GetDefaultFolder(olFolderInbox).Folders("Asset Notifications Macro")
i = 1


For Each olMail In Fldr.Items
If InStr(olMail.body, ActiveCell.Offset(rowOffset:=0, ColumnOffset:=-3).Value) <> 0 Then
olMail.display



    strbody = "<BODY style=font-size:11pt;font-family:Calibri>Team,<br><br>" & _
              "Please see the notice below regarding " & _
              ActiveCell.Offset(rowOffset:=0, ColumnOffset:=-2).Value & _
              ".<br><br> Feel free to email the CSG team at myemailhere@email.com with any questions.<br><br>" & _
                "Thank you!"

With olMail.Forward
.To = ActiveCell.Offset(ColumnOffset:=-1)
.display
SendKeys ("%")
SendKeys ("7")
 'Call Sleep
Application.Wait (Now + TimeValue("0:00:03"))
.HTMLBody = strbody & "<br>" & .HTMLBody

End With
End If
Next
End Sub
代码100%有效。我只是不知道搜索和突出显示结果的正确语法


在上面的例子中,假设我想找到并突出显示“谢谢”这个词。如何做到这一点?

基本上,您必须使用Word对象模型进行文本搜索和突出显示。本文中有一个很好的例子说明了如何做到这一点:

Outlook对象模型为工作项主体提供了三种主要方式:

-表示Outlook项目的明文正文的字符串。 -表示指定项的HTML正文的字符串。在这种情况下,您需要解析HTML标记并添加周围的标记以突出显示文本。例如,您可以使用粗体符号。 -正在显示的邮件的Microsoft Word文档对象模型。Inspector类的WordEditor属性从Word对象模型返回文档类的实例,您可以使用该实例处理消息体。Font类的属性允许将文本格式化为粗体。
您可以在中阅读更多关于所有这些方法的信息。选择HTML或Word对象模型突出显示文本的方式取决于您

在活动检查器中突出显示?尝试以下方法

可以将行集合objInspector=Application.ActiveInspector替换为集合objInspector=olMail.GetInspector

我想出来了:

.HTMLBody = Replace(.HTMLBody, "Thank you", "<FONT style=" & Chr(34) & "BACKGROUND-COLOR: yellow" & Chr(34) & ">" & "Thank you" & "</FONT>")

谢谢你的链接!这似乎是关于如何使用XML和C突出显示的说明。我不确定如何将其转换为VBA。只需关注所使用的Word对象和属性,您可以在VBAI中执行相同的操作。我已经仔细阅读了这些内容,恐怕这有点超出了我的技能水平。我试图搜索的文本将出现两次,一次出现在转发电子邮件时创建的邮件正文中,一次出现在原始转发电子邮件中。不确定这是否会使其中一个选项比另一个更好。我也不知道如何修改代码以有效地包含这些方法之一。我不想听起来像一个懒散的海报,但是你认为你可以用我目前的代码来指导我完成这项工作吗?我对学习如何做这类事情很感兴趣。我建议从这篇文章开始。谢谢!但我该如何调暗望远镜?我得到一个错误,对象变量不是set@JGoldz75Dim objInspector As Outlook.Inspector或您可以将变量声明为通用对象,以避免引用Outlook和Word类型库。
.HTMLBody = Replace(.HTMLBody, "Thank you", "<FONT style=" & Chr(34) & "BACKGROUND-COLOR: yellow" & Chr(34) & ">" & "Thank you" & "</FONT>")