我有一个主要的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()函数 .
1 回答
Solution One
在处理/解压缩之前备份所有.msg文件
Solution Two
在处理它们时备份.msg . 这样,在任何给定的时间点只有一个文件副本 .
我没有进行任何错误处理,但请做必要的 .
Edited
我相信你在
update_Emails
sub中使用了Dir
函数 . 请参阅下文,了解Dir
如何工作的摘要..Dir(<dir_name or file_match_string>)
- >这会将Dir
状态重置为从开始列出文件 .2.对
Dir()
的后续调用将列出从步骤1收集的列表中的下一个文件3.当没有更多文件要返回时,
Dir
返回空字符串 onceDir
将在3之后超出范围并且将再次发出错误,直到您再次执行步骤1If you do step 1 at any stage of a Dir() function call then you reset the Status to list files from start (如果你在
update_Emails
Sub中随时调用Dir(<dir_name>)
,那么你是否会打扰_1476200_中的Dir
状态)我相信你不得不在另一个
Dir
(在main
Sub)的中间重新使用Dir
(在update_Emails
Sub内),所以我会做以下事情: -Solution Three