根据Excel中的数据集,使用VBA将Outlook文件夹中的电子邮件移动到子文件夹
我在这里发现了一个与我的问题类似的问题 第一个模块- 此代码的第一部分-我已成功地将所有电子邮件数据导出到电子表格 第二模块- 我想指示Excel VBA根据我在电子表格中键入的数据集,将主文件夹中的电子邮件移动到子文件夹中(它不会基于电子邮件本身的过滤器/标准,只是其唯一的主题标题) 在第(c)列中,是电子邮件的主题(所有主题标题都是特定的/唯一的),在第(h)列中,我详细说明了我希望将其移动到的子文件夹的名称。不幸的是,我在执行我创建的代码时出错 我是一个Excel VBA的初学者,并没有最好的理解。我对我的代码有一个基于不同来源的想法,如果它不正确,请告诉我,我将不胜感激 多谢各位根据Excel中的数据集,使用VBA将Outlook文件夹中的电子邮件移动到子文件夹,excel,vba,outlook,Excel,Vba,Outlook,我在这里发现了一个与我的问题类似的问题 第一个模块- 此代码的第一部分-我已成功地将所有电子邮件数据导出到电子表格 第二模块- 我想指示Excel VBA根据我在电子表格中键入的数据集,将主文件夹中的电子邮件移动到子文件夹中(它不会基于电子邮件本身的过滤器/标准,只是其唯一的主题标题) 在第(c)列中,是电子邮件的主题(所有主题标题都是特定的/唯一的),在第(h)列中,我详细说明了我希望将其移动到的子文件夹的名称。不幸的是,我在执行我创建的代码时出错 我是一个Excel VBA的初学者,并没有
- 我尝试执行我在用户询问的问题中发现的代码,与我的代码类似,但它不起作用
分动发票()
'声明您的变量
将项目设置为Outlook.items
将子文件夹设置为Outlook。文件夹“这将是您要将邮件移动到的文件夹
'设置Outlook收件箱引用
Set OP=New Outlook.Application
设置NS=OP.GetNamespace(“MAPI”)
设置Mail=OP.CreateItem(olMailItem)
'循环浏览子文件夹及其文件夹
设置rootfol=NS.Folders(“SYNTHES-JNJCZ-GBS.DE.AT。CH@ITS.JNJ.com")
Set Folder=rootfol.Folders(“奥地利”)
'发票编号的列表应该是动态的
Dim arraysearch(1到1000)作为字符串
我想我会坚持多久
i=UBound(arraysearch)
arraysearch(i)=范围(“C2”).偏移量(i,0).值
如果i=0,那么
MsgBox“错误”
出口接头
如果结束
'文件夹类型的列表应该是动态的
Dim arraymove(1到1000)作为字符串
i=UBound(arraymove)
arraymove(i)=范围(“H2”).偏移量(i,0).值
如果i=0,那么
MsgBox“错误”
出口接头
如果结束
'要移动到的邮件的特定文件夹
Set subfolder=rootfol.Folders(arraymove(i))
对于文件夹.items.Restrict中的每个邮件(“[Subject]>=arraysearch(i)”)
如果arraysearch(i)=ArraySmove(i),则
项目。移动子文件夹
如果结束
下一封邮件
端接头
无需尝试查找该项目
它已经用Set item=items.item(lngCount)
标识
您可以检查主题,看看它是否是您想要的项目
'Find Email using Subject found on Column C
'Set item = items.Find(FilterText)
'If the object is an Email
If item.Class = olMail Then
If item.Subject = FilterText Then
'Find item under the main Folder subfolders
Set subfolder = Folder.Folders(FolderMove)
'Mark Item as Read
item.UnRead = False
'Move Item to folder type in Outlook
item.Move subfolder
End If
End If
在代码中,您将迭代文件夹中的所有项目:
'Loop through the Items in the folder backwards
'Setting Mail to counting backwards
For lngCount = items.Count To 1 Step -1
'setting object as Email item
Set item = items.item(lngCount)
这真的不是一个好主意。尤其是以后使用Find
方法时
如果您需要查找与您的条件相对应的项目,我建议使用items类的find
/FindNext
或Restrict
方法。请在以下文章中阅读有关这些方法的更多信息:
应用程序
类的方法很有用。在Outlook中使用AdvancedSearch
方法的主要好处是:
- 搜索在另一个线程中执行。您不需要手动运行另一个线程,因为
方法会在后台自动运行它AdvancedSearch
- 可以在任何位置搜索任何项目类型:邮件、约会、日历、备注等,即超出特定文件夹的范围。
和Restrict
/Find
方法可应用于特定的项目集合(请参阅Outlook中FindNext
类的文件夹
属性)项目
- 完全支持DASL查询(自定义属性也可用于搜索)。您可以在MSDN中的文章中阅读更多有关这方面的内容。为了提高搜索性能,如果为存储启用了即时搜索,则可以使用即时搜索关键字(请参见
类的存储
属性)IsInstantSearchEnabled
- 您可以使用
类的search
方法随时停止搜索过程stop
set subfolder=rootfol.folders(arraymove(i))
Hi niton!感谢您的评论,现在我认为整个find方法可能不是执行此功能的最佳方式。所以我重写了它并决定使用数组。不幸的是,我的新代码在中仍然有一个错误Set subfolder=rootfol.Folders(arraymove(i))
如果您有任何建议,请改进,我将不胜感激谢谢!