我目前正在使用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的傢伙)
這些似乎都不能遠程解決這個問題,因爲這兩個錯誤經常彈出,但間歇性地出現。 我真的不知道下一步將會在調試這個問題時會有什麼幫助,我們將非常感謝!
只有在沒有我嘗試引用的表格的情況下(即測試代碼時)出現的錯誤,即嘗試設置表格5的範圍時,我只有3個表格......這有可能嗎? –
即使當電子郵件中存在表格時,出現「不存在」錯誤,當我轉到doc.Tables(4).Range的監視表達式時,我可以看到表格數據,但是Outlook卻說不是。 –
你以哪種方式放置'2秒延遲'?這似乎是一個選擇... –