我正在尝试通过电子邮件中的“公司名称:”后面的电子邮件正文中获取文本。并将其放入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的建筑服务。
有人可以告诉我我哪里出错了。感谢
答案 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