我想知道你們是否可以幫助我。我們最近從Outlook 2003遷移到2010年。我們使用Outlook VBA腳本來接收特定的傳入電子郵件表單,通讀它們,提取信息並將其編譯到文件中。VBA For Loop未按預期工作
腳本可以工作,但它只能讀取文件夾中一半的消息。我對文件夾進行了計數測試,並且顯示了正確的數字,但由於某種原因,我使用的for循環僅對一半的項目執行。因此,如果文件夾中有8條消息,那麼它只能讀取其中的4條消息,如果有4條消息,則只讀取2條消息,等等......
我弄不清楚我的代碼的哪一部分是在轟炸。任何幫助將不勝感激。我只發佈了我的代碼的for循環部分。如果你需要整個腳本,請告訴我。
enter code here Set myOlApp = CreateObject("Outlook.Application") 'Outlook App Obj.
Set myNameSpace = myOlApp.GetNamespace("MAPI") 'MAPI Namespace
Set myFolder = myNameSpace.Folders("[email protected]").Folders("TestAccMail") 'Outlook folder to access
For Each Item In myFolder.Items 'Loop through each mail item
If (regex.Test(Item.Subject)) Then 'Test for TestAccX Message
strDataSplit = Split(Item.Body, vbNewLine) 'Split the contents of the body to an array
strOutput = ""
For Each arrItem In strDataSplit 'Loop through the contents of the e-mail body
If (regExData.Test(arrItem)) Then 'Test if line contains a field we need
field = Split(arrItem, ":")(1) 'Store the value of the field
strOutput = strOutput & Trim(Replace(field, Chr(160), "")) & "|" 'Concat the previous field value with current; seperated by |
End If
Next arrItem 'Next field in array
If Not strOutput = "" Then 'Ensure the output var has data
WriteToATextFile strOutput, file 'Append the data record to the provided file
Item.Move myFolder.Folders("TestAcc Complete") 'Move mail item to completed folder
recCount = recCount + 1
Else 'If the string is blank, no data was extracted; Error!
Item.Move myFolder.Folders("Errors") 'Move mail item to Error folder
errCount = errCount + 1 'Incremeant error count
End If
messCount = messCount + 1 'Incremeant message count, error or not
End If
Next 'Next TestAccX Message
你在這之前有一個錯誤的繼續嗎? for循環執行正確的次數?如果是這樣,你添加了代碼來查看它是否導致失敗的正則表達式或strOutput? –
亞歷克斯 - 我正在使用「On Error GoTo outlookerror:」,所以如果發生錯誤,我會收到通知。另外,For循環只執行一半的時間。我把它放在調試模式中,並遍歷所有的代碼。沒有發生錯誤,循環只執行了它應該有的一半時間。 – user2516507
好吧,您爲folder.items中的每個項目編寫了代碼,然後將該項目移動到其他文件夾,這當然是一種不好的做法。例如,你是第一個項目,你移動它。您現在將轉到第二個項目,但由於您已經移動了第一個項目,所以第二個項目獲取第一個索引,但是您已經移動到第二個索引,因此它忽略了第一個項目。無論何時處理收集,都要使用反向循環,因此即使您從收集中移動項目,也不會更改剩餘項目的索引。對不起,如果我的語言不清楚。 – Vikas