我有一个主要的Sub,我在其中放置了Dir()函数,以便遍历所选文件夹中的文件(文件由于它们的扩展而被定向到特定的Subs)。其中一种格式是Outlook电子邮件(.msg),然后宏提取工作簿并对其进行操作,最后删除提取的工作簿。但是(这是我的问题),宏需要对附件进行操作,尽管已被删除。它看起来像Dir()函数也包含这些附件,但是收集文件的Dir()指令是在主Sub的开头执行的(它没有放在循环中)。
我不知道如何删除附件并保留第一个文件集合。
以下是代码。 在一个主要的Sub:
dirfilename = Dir(strfilename & "\")
'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
然后我在Sub'update_Emails'的末尾使用Kill()函数。
答案 0 :(得分:0)
解决方案一
在执行处理/解压缩之前备份所有.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
解决方案二
在处理它们时备份.msg。这样,在任何给定的时间点只有一个文件副本。
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
我没有进行任何错误处理,但请做好帮助。
已修改
我相信你在Dir
sub中使用update_Emails
函数。请参阅下文,了解Dir
的工作原理摘要。
1. Dir(<dir_name or file_match_string>)
- &gt;这会将Dir
状态重置为从开始列出文件
2.对Dir()
的后续调用将列出从步骤 1 收集的列表中的下一个文件
3.当{em> 2 中没有其他文件要返回时,Dir
会返回空字符串一次
4. Dir
将在 3 之后超出范围,并且会在您再次执行 1 之前抛出错误
如果您在1
函数调用的任何阶段执行步骤Dir()
,那么您将状态重置为从开始列出文件(实质上是您打扰状态{如果您在Dir
Sub中随时致电main
,请Dir(<dir_name>)
Sub {1}}
我相信您必须在另一个update_Emails
(Dir
Sub)的中间重新使用update_Emails
(在Dir
Sub内),所以我会在下面执行: -
解决方案三
main