VBAoutlook。 尝试从电子邮件正文中提取特定数据并导出到Excel

我已经在这里find了很多指导,让我到目前的位置,但是我需要一些帮助来完成我的代码(我是一个完全的新手,所以对我很感兴趣)。 我正在尝试在Outlook中使用VBA来从我的Outlook的某个文件夹中的电子邮件中导出数据以优化。 我需要从众多电子邮件的消息正文中提取数据到Excel表单中。 我从中提取的电子邮件模板可以在下面find。 我需要参考号后面的10位数字,序列号后面的10位数字以及问题描述后的7位数字。 (如果不清楚的话,我会把需要的部分加粗)

尊敬的先生/小姐xxxxxxxx,

——————不需要信息—————–

参考号1234567890

状态:—-不需要信息—–

序列号: XXXXXXXXXX问题描述: ______________(这里的数据可能略有不同,我只能从这个区域拉出一个7位数的号码,但是如果不能这样做的话就这样吧)_______

用这个…。

—————–其余是不需要的———————–

到目前为止,我已经能够创build一个脚本来浏览我当前所在的Outlook文件夹,打开Excel工作表,在Excel中命名标题,并导入数据。 但是,它将整个身体拉到不只是我需要的部分,而是把它们放在excel中错误的列中。 这是因为我是一个完整的新手在这一点,我可以得到。 我在这个网站上find了一些与解决scheme类似的问题的例子,但我无法理解它们。 通过大量的试验和错误,我采取了张贴自己,任何帮助将不胜感激。 这是我现在的代码 –

Sub Extract() On Error Resume Next Set myOlApp = Outlook.Application Set mynamespace = myOlApp.GetNamespace("mapi") 'open the current folder, I want to be able to name a specific folder if possible… Set myfolder = myOlApp.ActiveExplorer.CurrentFolder Set xlobj = CreateObject("excel.application.14") xlobj.Visible = True xlobj.Workbooks.Add 'Set Heading xlobj.Range("a" & 1).Value = "Case Number" xlobj.Range("b" & 1).Value = "HDD Serial Number" xlobj.Range("c" & 1).Value = "Sys Serial Number" xlobj.Range("d" & 1).Value = "User" For i = 1 To myfolder.Items.Count Set myitem = myfolder.Items(i) msgtext = myitem.Body 'search for specific text delimtedMessage = Replace(msgtext, "reference number", "###") delimtedMessage = Replace(delimtedMessage, "Problem description:", "###") delimtedMessage = Replace(delimtedMessage, "Serial Number:", "###") messageArray = Split(delimtedMessage, "###") 'write to excel xlobj.Range("a" & i + 1).Value = messageArray(1) xlobj.Range("b" & i + 1).Value = messageArray(2) xlobj.Range("c" & i + 1).Value = messageArray(3) xlobj.Range("d" & i + 1).Value = myitem.To Next End Sub 

到目前为止使用的参考: 使用VB / VBA来searchOutlook邮件,并提取具体的数据到Excel工作表还有另一个我用我找不到链接,并在reddit上的线程,但我仍然卡住。 我不确定这是否是实现我想要的结果的最好方法,因为这是我第一次尝试这样的事情。 我愿意改变任何事情。 提前致谢

看起来像一个“完整的新手”非常好的代码

你的代码非常接近工作。 你似乎错过的东西是理解Arrayvariables“messageArray”是如何工作的。

默认情况下数组从零开始,并从那里向上移动。 所以具有3个可能值的数组将被标注为

 dim messageArray(3) as string -'meaning an array with 3 possible values all of which are strings 

并填充该variables,然后你需要改变你的代码从你有这个

 xlobj.Range("a" & i + 1).Value = messageArray(0) ' Not 1 xlobj.Range("b" & i + 1).Value = messageArray(1) ' Not 2 xlobj.Range("c" & i + 1).Value = messageArray(2) ' Not 3 

另外要注意的是使用分割function,分隔符非常优雅,但是您的数据列可能最终不只是客户编号,而是客户编号加上一大堆文本不想。 您可能需要考虑起始和结束分隔符。

例如,就像你所拥有的那样,来自电子邮件的文本正在读取

参考号1234567890
状态:—-不需要信息—–
序列号: XXXXXXXXXX Pro …….

你的分隔符会find关键词“参考号码”和“序列号”,留下你的文字看起来像这样

 ### **1234567890**. ' *STATUS: ----not needed info-----* ### **XXXXXXXXXX** Pro....... 

通过这种方式,您的第一列数据将包含两个分隔符“###”之间的所有内容,这意味着您的第一列将包含所有这些内容:

 > **1234567890**. > *STATUS: ----not needed info-----* 

而不仅仅是这个

1234567890

最简单的解决方法是在“STATUS”中添加另一个分隔符,并添加另一个名为“status”的列。最后,您将最终得到4列和ALL数据整齐划分。

我可以看到,自从你发布了这一段时间以来,我希望这会有所帮助。 抱歉所有的疯狂的格式,我以前没有张贴在StackOverflow。