簡體   English   中英

VBA Outlook。 嘗試從電子郵件正文中提取特定數據並導出到Excel

[英]VBA Outlook. Trying to extract specific data from email body and export to Excel

我在這里找到了很多指南讓我到達目前的位置,但是我需要一些幫助來完成我的代碼(我是一個完全的新手,所以請耐心等待)。 我試圖在Outlook中使用VBA從我在Outlook的某個文件夾中的電子郵件中導出數據以獲得優秀。 我需要從眾多電子郵件的郵件正文中提取數據到excel表中。 我從中提取的電子郵件模板可以在下面找到。 我需要參考編號后面的10位數字,序列號后面的10位數字和問題描述后的7位數字。 (如果不清楚的話,我已經加了我需要的部分)

親愛的先生/女士xxxxxxxx,

------------------不需要的信息-----------------

參考編號1234567890

狀態:----不需要信息-----

序列號: XXXXXXXXXX問題描述: ______________(這里的數據可能略有不同,我只是想從這個區域拉一個7位數字,但如果不能這樣做那么就這樣吧)_______

用這個…。

-----------------其余部分不需要-----------------------

到目前為止,我已經能夠創建一個腳本來瀏覽我當前所在的Outlook文件夾,打開Excel工作表,在Excel中命名標題,然后導入數據。 然而,它拉動整個身體而不僅僅是我需要的部分,並將它們放入excel的錯誤列中。 不幸的是,因為我是一個完整的新手。 我能夠在這個網站上找到一些與解決方案類似的問題的例子,但我無法理解它們。 通過大量的試驗和錯誤,我已經使用了自己發布,任何幫助將非常感激。 這是我目前的化身代碼 -

    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搜索Outlook郵件並將特定數據提取到Excel工作表中我使用了另一個我無法找到鏈接的文件,以及reddit上的一個帖子,但我仍然卡住了。 我不確定這是否是實現我想要的結果的最佳方式,因為這是我第一次嘗試這樣的事情。 我願意改變一切。 提前致謝

對於“完全新手”來說似乎非常好的代碼

您的代碼非常接近工作。 你似乎錯過的是理解Array變量“messageArray”是如何工作的。

默認情況下,數組從零開始,然后從那里向上移動。 所以具有3個可能值的數組將被標注為

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

並且要填充該變量,您需要將代碼從您擁有的更改為此

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

另一件需要注意的事情是使用分割功能,分隔符非常優雅,但您的數據列最終可能不只是客戶編號,而是客戶編號加上一大堆文本。不想。 您可能需要考慮起始和結束分隔符。

例如,正如您所擁有的那樣,您當前正在閱讀的電子郵件中的文本

參考編號1234567890
狀態:----不需要信息-----
序列號: XXXXXXXXXX Pro .......

您的分隔符將找到關鍵詞“參考編號”和“序列號”,並留下您的文字看起來像這樣

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

這樣你的數據的第一列將包含兩個分隔符“###”意味着你的第一列將包含所有這之間的一切

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

而不僅僅是這個

1234567890

最簡單的解決方案是在'STATUS'處添加另一個分隔符,並添加另一個名為'status'的列。最終會有4列和所有數據整齊地細分。

我發現這已經有一段時間了,我希望這會有所幫助。 為瘋狂的格式化而道歉,我之前沒有在StackOverflow上發布過。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM