解決方案一
使所有.msg文件的備份做處理前/提取
Sub main()
.
.
.
dirfilename = Dir(strfilename & "\")
'Make a backup of all the .msg files
MkDir(strfilename & "\backUP")
FileCopy(strfilename & "\*.msg", strfilename & "\backUP\.")
'Do the loop for all files in a folder
Do While dirfilename <> ""
If InStr(1, dirfilename, ".xls", vbBinaryCompare) > 0 Then
update_Excel_files strfilename, dirfilename, mistakes_table_name, counter
ElseIf InStr(1, dirfilename, ".msg", vbBinaryCompare) > 0 Then
update_Emails strfilename, dirfilename, mistakes_table_name, counter
End If
dirfilename = Dir
Loop
.
.
'MAKE SURE YOU CLEAN UP AT THE END OF MAIN SUB
Kill(strfilename & "\backUP\*.*")
RmDir(strfilename & "\backUP")
End Sub
Sub update_Emails(strfilename As String, dirfilename As String, mistakes_table_name As String, counter As Integer)
.
.
.
'PROCESS ON .MSG FILES FROM <<strfilename & "\backUP">>
.
.
.
End Sub
解決方案二
製作。味精的備份到什麼時候他們被處理。這樣,在任何給定的時間點只有一個文件副本。
Sub main()
MkDir(strfilename & "\backUP")
.
.
.
Kill(strfilename & "\backUP\*.*")
RmDir(strfilename & "\backUP")
End Sub
Sub update_Emails(strfilename As String, dirfilename As String, mistakes_table_name As String, counter As Integer)
.
.
'PROCESS ANY OLDER .MSG FILES FROM BAKCUP FOLDER
.
.
.
'MAKE A BACKUP OF THE FILE BEFORE IT IS KILLED
FileCopy(strfilename & "\" & dirfilename, strfilename & "\backUP\.")
Kill(strfilename & "\" & dirfilename)
End Sub
我還沒有把任何錯誤處理,但請做需要。
編輯
我相信你正在使用的update_Emails
子裏面Dir
功能。請參閱下面的摘要以瞭解Dir
的工作方式。
1. Dir(<dir_name or file_match_string>)
- >這會將Dir
狀態重置爲從開始列出文件。
2. Dir()
的後續調用將列出在列表中的下一個文件從步驟收集
3. Dir
返回空字符串一次時,有沒有更多的文件返回像
4 。Dir
會走出範圍後,將拋出一個錯誤,直到你一步1再次
如果步驟1
在Dir()
函數調用的任何階段,那麼您重置狀態,列出文件從開始(本質上是你打擾Dir
的狀態main
子,如果你打電話Dir(<dir_name>)
隨時在update_Emails
子)
我相信你不必再使用Dir
(內update_Emails
亞)在Dir
(在main
另一個子的中間),所以我會做如下: -
解決方法三
Sub main()
.
.
.
Dim origFileList as Collection
dirfilename = Dir(strfilename & "\")
While dirfilename <> ""
origFileList.add(dirfilename)
dirfilename=Dir()
End While
'Make a backup of all the .msg files
MkDir(strfilename & "\backUP")
FileCopy(strfilename & "\*.msg", strfilename & "\backUP\.")
'Do the loop for all files in a folder
For Each dirfilename in origFileList
If InStr(1, dirfilename, ".xls", vbBinaryCompare) > 0 Then
update_Excel_files strfilename, dirfilename, mistakes_table_name, counter
ElseIf InStr(1, dirfilename, ".msg", vbBinaryCompare) > 0 Then
update_Emails strfilename, dirfilename, mistakes_table_name, counter
End If
dirfilename = Dir
Next dirfilename
.
.
'MAKE SURE YOU CLEAN UP AT THE END OF MAIN SUB
Kill(strfilename & "\backUP\*.*")
RmDir(strfilename & "\backUP")
End Sub
Sub update_Emails(strfilename As String, dirfilename As String, mistakes_table_name As String, counter As Integer)
.
'HERE YOU CAN USE DIR as NOW IT WILL NOT INTERFERE WITH Dir State in main
.
'PROCESS ON .MSG FILES FROM <<strfilename & "\backUP">>
.
.
.
End Sub
請發表您的代碼,以便我們可以幫助你。 – YowE3K