在字符串后查找文本并将其粘贴到电子邮件的开头

时间:2014-08-04 04:01:20

标签: vba outlook

我有一个由客户填写的在线表格,然后通过电子邮件使用标准模板发送。当我们发送回复时,我们会手动输入每个回复的客户名称。我正在寻找的是一种提取名称并将其插入电子邮件顶部的方法。

名称始终以名字作为前缀:"名称"。 在电子邮件的开头,我想填写名称,例如亲爱的"姓名",

我知道在Excel中你可以使用单元格公式只取一部分字符串:= LEFT(G91,LEN(G91)-5) 有什么方法可以在Outlook中使用类似的东西吗?

我一直无法找到一种方法来接收电子邮件正文的特定部分并在电子邮件中引用它。我在网上找到的所有内容都集中在导出到Excel或添加到文本末尾。

1 个答案:

答案 0 :(得分:0)

这里描述。 http://msdn.microsoft.com/en-us/library/dd492012(v=office.12).aspx#Outlook2007ProgrammingCh17_ParsingTextFromAMessageBody

未经测试 - 已编辑 - 已根据评论

中的建议修复
Sub FwdSelBodyName()
    Dim objOL As Outlook.Application
    Dim objItem As Object
    Dim objFwd As Outlook.MailItem
    Dim strAddr As String
    Dim strName As String
    On Error Resume Next
    Set objOL = Application
    Set objItem = objOL.ActiveExplorer.Selection(1)
    If Not objItem Is Nothing Then
        strName = ParseTextLinePair(objItem.Body, "First Name:")
        If strAddr <> "" Then
            Set objFwd = objItem.Forward
            objFwd.HTMLBody = "Dear " & strName & objFwd.HTMLBody
            objFwd.Display
        Else
            MsgBox "Could not extract name from message."
        End If
    End If
    Set objOL = Nothing
    Set objItem = Nothing
    Set objFwd = Nothing
End Sub

Function ParseTextLinePair (strSource As String, strLabel As String)
    Dim intLocLabel As Integer
    Dim intLocCRLF As Integer
    Dim intLenLabel As Integer
    Dim strText As String
    intLocLabel = InStr(strSource, strLabel)
    intLenLabel = Len(strLabel)
        If intLocLabel > 0 Then
        intLocCRLF = InStr(intLocLabel, strSource, vbCrLf)
        If intLocCRLF > 0 Then
            intLocLabel = intLocLabel + intLenLabel
            strText = Mid(strSource, _
                            intLocLabel, _
                            intLocCRLF - intLocLabel)
        Else
            intLocLabel = _
              Mid(strSource, intLocLabel + intLenLabel)
        End If
    End If
    ParseTextLinePair = Trim(strText)
End Function