在Outlook VBA中调用MailItem.Move为何出现类型不匹配?
Outlook VBA:MailItem.Move 类型不匹配问题
问题描述:
使用MailItem.Move方法时,语法为:
<MailItem>.Move(<Folder>)
运行代码触发“类型不匹配”错误,调试时高亮行是oMailItem.Move (oDestFolder)。监视窗口显示oMailItem是正确的MailItem类型,oDestFolder是正确的Folder类型且对象均存在,为何仍报错?
问题根源:VBA的括号传递规则
在VBA中,调用方法时给参数单独加括号,会强制触发**按值传递(ByVal)的行为,而MailItem.Move方法要求接收按引用传递(ByRef)**的Folder对象。
当你写oMailItem.Move (oDestFolder)时,括号会把oDestFolder对象转换成它的默认属性(Outlook Folder对象的默认属性是Name,即字符串类型),此时传递给Move方法的不再是Folder对象,而是字符串,直接导致“类型不匹配”错误。
解决方案
- 直接调用方法,去掉参数外的括号:
oMailItem.Move oDestFolder
- 如果需要接收Move方法返回的移动后MailItem对象,此时需要加括号(赋值场景下VBA允许括号,且会正确传递对象引用):
Dim movedItem As Outlook.MailItem Set movedItem = oMailItem.Move(oDestFolder)
内容的提问来源于stack exchange,提问作者NewSites
相关产品推荐
相关产品推荐

