从outlook电子邮件中获取某些文本字符串

时间:2014-11-10 12:20:14

标签: excel vba outlook

我正在尝试通过电子邮件中的“公司名称:”后面的电子邮件正文中获取文本。并将其放入excel电子表格中。

例如,如果我们有公司名称:John's Building Services

然后我们会在公司名称后面得到文本:所以我们的结果将是'John's Building Services'

我使用以下代码:

Dim b4 As String
                        b4 = olkMsg.Body
                        Dim indexOfNameb As Integer
                        indexOfNameb = InStr(1, b4, "Company Name: ")
                        Dim finalString4b As String
                        finalStringb = Right(b4, Len(b4) - indexOfNameb - 13)
                        excWks4.Cells(intRow4, 1) = finalStringb

这会获取公司名称后面的文字,但是在我的电子邮件正文中,我的文字也在下面的行中:

Company Name: John's Building Services
Company number: 123
Company Status: live
etc
etc

我得到的问题是我的代码返回公司名称后的所有内容:包括下面行中的所有文本,我只想在公司名称后直接获取文本:这应该是John的建筑服务。

有人可以告诉我我哪里出错了。感谢

1 个答案:

答案 0 :(得分:0)

您的代码是正确的,当Right()工作时,您从公司名称的起始索引到结尾获取字符串 - 它从字符串结尾开始需要特定数量的字符。 你想要的是找到公司编号的起始索引(或你在那里的任何终止字符 - 可能是vbCrLf?)并使用Mid(br, start index, length),其中长度为Len(b4) - 公司编号的开始索引。

您应该添加以下代码:

Dim indexOfNamec As Integer
indexOfNamec = InStr(1, b4, "Company number: ")

而不是

finalStringb = Right(b4, Len(b4) - indexOfNameb - 13)

使用

finalStringb = Mid(b4, indexOfNameb, indexOfNamec - indexOfnameb)

我不确定这个indexOfNamec - indexOfnameb计算是否定义了finalString的正确长度,但它应该会有所帮助。

完整测试子代码:

Sub test()

    Dim b4 As String
        b4 = "blablablabla Company Name: CompName Company number: CompNumber blablablablabla"

    Dim indexOfNameb As Integer
        indexOfNameb = InStr(1, b4, "Company Name: ")

    Dim indexOfNamec As Integer
        indexOfNamec = InStr(1, b4, "Company number: ")

    Dim finalStringb As String

        finalStringb = Mid(b4, indexOfNameb, indexOfNamec - indexOfNameb)

        Sheets(1).Cells(1, 1) = finalStringb

End Sub