2013-02-13 157 views
1

我有VBA代码在特定的Outlook文件夹中查找电子邮件中的附件并将它们保存到某个位置。Outlook规则未运行VBA代码

我有一个Outlook规则将电子邮件发送到Outlook文件夹,然后触发宏。该代码不会自动在我的电脑上启动,但会在另一台计算机上启动。电子邮件进入,规则将其放入文件夹,但代码不运行。当我手动运行代码时,通过VB编辑器,它将附件保存在正确的位置。

我检查过以确保文件夹和路径名是正确的(如果他们错了,那么无论哪种方式,手动运行时代码将无法正常运行)。

展望规则:邮件到达

之后,从XXXXXXXXXXXX

与XXXX在主题

,这台机器只

它移动到

应用此规则xxxxx文件夹

和运行Project1.ThisOutlookSession.Save

VBA代码:

Sub Save(item As Outlook.MailItem) 
Dim olApp As Outlook.Application 
Dim objNS As Outlook.NameSpace 
Dim olFolder As Outlook.MAPIFolder 
Dim msg As Outlook.MailItem 

Set olApp = Outlook.Application 
Set objNS = olApp.GetNamespace("MAPI") 
Set olFolder = objNS.GetDefaultFolder(olFolderInbox) 
Set olFolder = olFolder.Folders("xxxxxxx") 
Set oApp = CreateObject("Shell.Application") 

For Each myitem In olFolder.Items 
    For Each att In myitem.Attachments 
    att.SaveAsFile "\\.............\" & att.FileName 
     myitem.Attachments.Remove 1 
     myitem.Save 
    Next 
Next 
End Sub 
+0

试试这个http://stackoverflow.com/questions/6604675/move-outlook-messages-if-content-contains-a-number-greater-than-threshold/9639088 #9639088移动代码中的消息,如本文所示。所以基本上你把你的代码和我的代码结合起来 – 2013-02-14 06:57:29

回答

0

传入的MailItem是在Sub保存(作为Outlook.MailItem)项。它没有用在代码中。

后来手动运行时,代码仍然忽略传递的任何项目,但现在处理olFolder中的所有项目。

试试这个:

Sub Save(item As Outlook.MailItem) 
For Each att In item.Attachments 
    att.SaveAsFile "\\.............\" & att.FileName 
    item.Attachments.Remove 1 
    item.Save 
Next 
End Sub