使用VBA Outlook移动邮件

时间:2015-06-08 19:43:00

标签: vba outlook

这两条线有什么区别?

  1. Set MyMsg = MyMsg.Move(MyFolder2)
  2. MyMsg.Move(MyFolder2)
  3. 第一个工作得很好。 第二个通常会给出“Outlook没有响应”错误。

2 个答案:

答案 0 :(得分:1)

MailItem.Move方法返回已移动的MailItem。通常,属性返回值和方法不返回任何内容。但是对于几种方法,设计者认为有一个返回值会很方便,所以他们让它们返回一个值(或对象)。

将方法分配给变量时,任何参数都必须在括号中,否则会出现语法错误。如果调用方法而不将其赋值给变量(因为你不关心方法返回什么,或者它是不返回值的方法之一),那么参数不能在括号中(类型)。

括号,当在编译器不需要它们的地方使用时,相当于说“在做任何其他事情之前评估它”。这就像你如何按操作顺序使用括号,所以你可以说“在进行这种乘法之前评估这个加法运算,即使这不是正常的顺序”。

上面的(某种)评论是因为大多数情况下,当你“错误地”将括号括起来时,这并不重要。

Application.CreateItem 0

Application.CreateItem (0)

是一样的。第二个参数在将参数传递给CreateItem之前对其进行求值,但是评估单个整数不会花费任何时间并且没有任何不良影响。括号不是必需的,因为我们没有将结果分配给变量,但它们也没有真正伤害任何东西。

在第二个示例中,您告诉编译器评估该文件夹,然后将其发送到Move方法。我不知道评估文件夹意味着什么,但我认为它并不好。它可能会像创建该文件夹中所有对象的数组或类似密集的东西。当Outlook没有响应时,这意味着你给了它如此重要的工作,以至于它没有及时检查操作系统。

所以:当它在等号的右侧时,使用括号作为参数。如果不是,请不要使用它们。该规则有一些例外,但您可能永远不需要了解它们。

答案 1 :(得分:0)

两者之间没有区别(你只是忽略了函数结果),除非你之后实际使用了MyMsg变量 - 在移动消息之后,你再也无法访问它了。

使用第一个版本。