Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从outlook电子邮件中获取特定文本字符串_Excel_Vba_Outlook - Fatal编程技术网

Excel 从outlook电子邮件中获取特定文本字符串

Excel 从outlook电子邮件中获取特定文本字符串,excel,vba,outlook,Excel,Vba,Outlook,我正试图从电子邮件正文中获取我电子邮件中“公司名称”后的文本。并将其放入excel电子表格中 例如,如果我们有公司名称:John's Building Services 然后我们会在公司名称后得到文本:因此我们的结果将是“John's Building Services” 我正在使用以下代码: Dim b4 As String b4 = olkMsg.Body Dim indexOfNameb As

我正试图从电子邮件正文中获取我电子邮件中“公司名称”后的文本。并将其放入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的建筑服务


有人能告诉我哪里出了问题吗。谢谢

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

您应该添加以下代码:

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

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

我不确定这个
indexOfNamec-indexOfnameb
计算是否定义了合适的最终字符串长度,但它应该会有所帮助

完整测试子代码:

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

谢谢你的回复,但是我真的很抱歉,但是我是vba新手,不太明白你的意思,可以通过演示给我看吗?谢谢,当我运行它时,我得到了一个无效的过程错误,它不像第二行MID(),我用完整的子代码编辑了我的答案,它正在工作。请仔细检查您的代码和变量声明。@Rafel Wegner,当我用b4=olkmsg.body替换b4=“Blablabla公司名称:CompName公司编号:CompNumber Blabla”时,我得到一个无效的过程错误,您知道这是为什么吗?@jamesdaley,根据MS,如果长度参数为负数(),则可能会发生此错误。检查两个索引的值,可能第一个是0(InStr没有找到字符串)或其他。尽管您可能会发现此链接很有用:它显示了Outlook的一些工作。
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