VBA - 而不是ActiveExplorer.Selection来设置文件夹,显式设置文件夹路径


0
Sub MoveItems() 
    Dim Messages As Selection 
    Dim Msg As MailItem 
    Dim NS As NameSpace 
    Set NS = Application.GetNamespace("MAPI") 
    Set Messages = ActiveExplorer.Selection 
    If Messages.Count = 0 Then
      Exit Sub 
    End If 
    For Each Msg In Messages 
      Msg.Move NS.Folders("Personal Folders").Folders("SavedMail") 
    Next
End Sub 

此代码将所有电子邮件从Outlook中当前选定的文件夹移动到另一个文件夹(SavedMail)。我想编辑代码,以便不是使用当前选择的文件夹作为消息的来源,而是会有一个硬编码的文件夹 - 类似于 Set Messages = NS.Folders("Personal Folders").Folders("Moved")

我是一个VBA新手,并尝试用此替换Set Messages行导致运行时错误'13':类型不匹配,我认为是指Dim Messages和Set Messages命令的不匹配。我尝试过使用不同的Dim定义而没有运气。我猜想知道VBA的人会立即看到这样做的方法。

Answers:


1

我认为你遇到的问题就是这条线

If messages.count = 0 then

一旦定义 messages 作为一个文件夹,你无法计算它 - 它想要计算一系列邮件项目。除非你需要处理这样的错误,否则你可以像这样删除代码 -

Sub MoveItems() 
    Dim Msg As MailItem 
    Dim NS As NameSpace 
    Set NS = Application.GetNamespace("MAPI") 
    For Each Msg In NS.Folders("Personal Folders").Folders("Moved").Items
      Msg.Move NS.Folders("Personal Folders").Folders("SavedMail") 
    Next
End Sub 

1
我会假设,即使它可以计算messages.count,它仍然没有用? OP进入一个foreach,如果没有什么可以迭代,那么它会以任何方式跳过它?
Dave

@Raystafarian它发生在任何项目甚至处理之前。所有物品都是邮件物品。当我使用“Dim Messages As Selection”运行原始帖子中包含的代码时,代码运行正常。只有当我明确定义我遇到麻烦的文件夹的路径时。
Mike

@Raystafarian似乎有所作为。我认为这是明确定义文件夹所需的修复。还有一个问题出现了。 Moved文件夹中有25封电子邮件,但只有13封由新编辑的代码移动。这些25件商品在抵达时使用outlook电子邮件规则从收件箱中复制。使用“Dim Messages As Selection”的原始代码确实移动了所有25个。
Mike

@Raystafarian看起来它正在处理第一个项目,然后跳过下一个项目,然后处理下一个项目,等等。我不确定For Each是如何工作的,但也许是使用计数器处理项目编号1,然后是项目但是,在处理项目编号1中,它将项目编号1移动到不同的文件夹。这留下了第2项作为现在的数字1.因此,当它接下来处理第2项时,它实际上将在循环首次启动时处理第3项。
Mike

1
@Raystafarian做了这个伎俩。迭代后退接受答案的链接是正确的。
Mike
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.