2013-07-16 598 views
3

我目前正在使用Outlook 2010 VBA宏從電子郵件中提取信息並將其放入Excel文件中。我們的想法是,每封電子郵件每次都在電子郵件中嵌入表中的相同字段(名稱,訂單號,日期等),並將該數據放入電子表格中。要做到這一點,我目前使用下面的代碼來獲取表,並將其移動到Excel:將表格從Outlook電子郵件複製到Excel文件 - VBA

'This code is inside a for each loop for each message 
Set excelWorksheet2 = excelWorkbook.Worksheets.item(2) 
Set excelWorksheet3 = excelWorkbook.Worksheets.item(3) 
Set excelWorksheet4 = excelWorkbook.Worksheets.Add(After:=excelWorkbook.Sheets(excelWorkbook.Sheets.count)) 

Dim mailObj As Outlook.MailItem 
Dim doc As Word.Document 
Set doc = mailObj.GetInspector.WordEditor 

Dim table1, table2, table3 As Object 
Set table3 = doc.Tables(4).Range 
Set table2 = doc.Tables(3).Range 
Set table1 = doc.Tables(2).Range 

table1.Copy 
excelWorksheet2.Paste 
table2.Copy 
excelWorksheet4.Paste 
table3.Copy 
excelWorksheet3.Paste 
Set table1 = Nothing 
Set table2 = Nothing 
Set table3 = Nothing 

'I do much more of this to get the data from each table and put it into a master worksheet... 
excelWorksheet.Cells(rows, cols + 1).Value = excelWorksheet2.Cells(4, 2).Value 'Contract Number 
excelWorksheet.Cells(rows, cols + 2).Value = excelWorksheet2.Cells(4, 4).Value 'Contractor Name 

Set doc = Nothing 
Set excelWorksheet2 = Nothing 
Set excelWorksheet3 = Nothing 
Set excelWorksheet4 = Nothing 

我收到以下錯誤,每隔一段時間,但並不相同的數據出現,它是隨機,似乎只發生在Outlook /電子郵件側:

  • 「請求的收集成員不存在。」在.Range
  • (錯誤代碼 5941)「對象‘範圍’的方法‘複製’失敗」在.Copy

有時候,這兩種錯誤的發生,如果我步如果複製失敗,宏將崩潰。

我曾嘗試:

  • 以2秒把通過較少的郵件延遲
  • 轉到
  • 每一封電子郵件後清除剪貼板(此代碼通常當我選擇> 10個 郵件處理失敗)
  • 關閉/解除分配在對象Nothing(不知道 這是最好的實踐,我更多的是C/C++/C#/ Java的傢伙)

這些似乎都不能遠程解決這個問題,因爲這兩個錯誤經常彈出,但間歇性地出現。 我真的不知道下一步將會在調試這個問題時會有什麼幫助,我們將非常感謝!

+0

只有在沒有我嘗試引用的表格的情況下(即測試代碼時)出現的錯誤,即嘗試設置表格5的範圍時,我只有3個表格......這有可能嗎? –

+1

即使當電子郵件中存在表格時,出現「不存在」錯誤,當我轉到doc.Tables(4).Range的監視表達式時,我可以看到表格數據,但是Outlook卻說不是。 –

+0

你以哪種方式放置'2秒延遲'?這似乎是一個選擇... –

回答

2

基於我一直在研究WordEditor表格的問題,似乎複製/粘貼操作的數量和搜索HTML表格只是不允許可靠的行爲。一個可能的解決方案可能是將整個電子郵件複製到Excel中並以這種方式解析表(這仍然需要複製/粘貼)。

我所做的解決此問題的方法之一是間接地將所有電子郵件保存爲HTML文件(通過在Excel中運行的Outlook.Application:email.SaveAs folderPath + fileName + ".html", olHTML)並保存在臨時目錄中,並讓Excel打開工作簿中的HTML文件並開始工作數據就是這樣。這更可靠(雖然增加了開銷),並且允許將大量電子郵件正確地導出到Excel。

如果有人想要我的問題的確切代碼,給我留言(vindansam在hotmail.com,它有點長,並有一些專有信息)。

WordEditor似乎無法很好地處理信息,這可能太糟糕了,也許微軟會在下一個版本的Office中使用它。

+0

你不提供電子郵件地址,所以任何人都可以給你發郵件。你看過問題後我在評論中鏈接的答案嗎?如果你想讓我被告知你已經回覆,你需要在任何回覆中加入@Tony Dallimore。 –

相關問題