VBA Outlook 2010.将特定的Outlook正文文本提取到Excel

时间:2016-06-10 08:45:30

标签: excel vba excel-vba outlook

有一些帖子在这个主题上开放,但似乎没有一个帖子能够完全满足我的需要。我做了一些编程但是我从未对VBA做过任何事情。每天我收到一系列不同的电子邮件,从10到50都包含以[Tk#*******]新请求(* = 7位数字)开头的主题行 然后在正文文本中有一个看起来像这样的表单:

Body Text

然后我设置了一个带有'用户名'在' C','公司'在' G','有效期至'在' H'和' Ticket'在'我'。我想首先从主题中提取7位数的票号并将其放入excel' Ticket'领域,然后只是' smithjoh'部分来自登录字段并将其放入'用户名',然后外部公司列为'公司'最后到期日期有效,直到'。

首先,我想知道这是否可行,因为它正在提取数据的特定部分,如果有的话,如果有人可以帮助我完成这项工作,那将是最受欢迎的。我自己试图这样做,但是由于缺乏经验让我无能为力,不幸的是没有什么可以合作的。如果可以做到这一点,它会帮助我很多,因为它会自动完成一项非常乏味的手动任务。

谢谢, 马克

1 个答案:

答案 0 :(得分:0)

好的,如果你没有问题地抓住身体和标题,那么你只需要进行字符串操作。将它们分别读入变量。假设你的主题是文字的#34; TK#*******新请求"那么这应该让你开始。基本上为要拉出的每个部分重复这个逻辑。获得变量中的值后,就可以将这些值放入单元格中。

Dim sSubject as string
Dim sBody as string
Dim sTicket as string
Dim sLogin as string
Dim lLoginPos as long
Dim iLoginLength as integer

sTicket = Mid(sSubject,4,7) 'start 4th char and grab 7 ... if you actually have the brackets in the subject then do 5,7

lLoginPos = InStr(sBody, "emea") + 5 'if they aren't all emea you will need to key off the "Req on behalf name" and add more to the result the result will be the e in emea so add 5 to get past that to the login.
iLoginLength = InStr(sBody, "Req on behalf mail") - lLoginPos ' you might need to subtract an additional 1 or 2 if your result isn't perfect. Not sure what the blank white spaces in your screenshot will do here.
sLogin = Mid(sBody,lLoginPos,iLoginLength) ' grabs that username. 
With Sheets("Sheet1")
  cells(1,3) = sLogin ' puts that into Row 1 Colum 3 (C) Cells is R1C1 ... backwards from the normal way you think of excel
End With

对要抓取的所有其他部分使用其他字符串变量,只需重复查找起始位置和结束位置的逻辑,然后使用mid将其放入变量中。

给它一个填充剩下的部分,如果你遇到困难,请将代码发布到那一点,让我们知道哪条线路给你带来了麻烦。 请勿忘记打开本地窗口并使用F8键一次一行地执行代码,以便您可以准确了解正在发生的事情。这对于字符串操作。