执行VBA脚本而无需访问"运行脚本" Outlook 2016中的规则

时间:2018-03-08 20:03:57

标签: vba outlook outlook-vba outlook-filter

我的计算机上有Outlook 2016,并且运行脚本"规则已被禁用。我知道应该在regedit文件中进行更改,但我需要管理员权限才能执行此操作。我的IT团队位于全国各地,所以我已经等了两个星期让他们改变这一点,我确信它永远不会发生。

所以,我想知道是否有解决方法或方法来编写相同的流程?

当我收到主题行中包含某些单词的电子邮件时,我希望规则/脚本将文件附件(在电子邮件中)保存到计算机上的文件夹中。

我根本没有VBA专家(尤其是Outlook),所以我可能远离正确的道路,但我已经给了它一个机会:

Private Sub Application_Startup()
    Dim oRule as Outlook.Rule
    Dim oRuleAction as Outlook.RuleAction
    Dim oRuleCondition as Outlook.RuleCondition

    Set oRule = colRules.Create("Transfer Attachment", olRuleSubject)
    Set oRuleCondition = oRule.Conditions.Subject("FINAL-CPW GRP SALES")
    Set oRuleAction = SaveAtlasReport
End Sub

Public Sub SaveAtlasReport()
    Dim att as Attachment
    Dim FileName as string

    FileName = "C:\Users\WCD1867\Documents\AttachTest\PositivePOS.xlsx"
    att.SaveAsFile FileName

End Sub

2 个答案:

答案 0 :(得分:1)

将“Outlook规则/运行脚本”替换为 Items.ItemAdd Event (Outlook) Items.Restrict Method (Outlook) {{3}主题行

实施例

Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
    Dim olNs As Outlook.NameSpace
    Dim Inbox  As Outlook.MAPIFolder
    Dim Filter As String

    Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & _
                       Chr(34) & " Like '%FINAL-CPW GRP SALES%' AND " & _
                       Chr(34) & "urn:schemas:httpmail:hasattachment" & _
                       Chr(34) & "=1"

    Set olNs = Application.GetNamespace("MAPI")
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
    Set Items = Inbox.Items.Restrict(Filter)

End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
    If TypeOf Item Is Outlook.mailitem Then
        Dim AtmtName As String
        Dim FilePath As String
            FilePath = "C:\Temp\"

        Dim Atmt As Attachment
        For Each Atmt In Item.Attachments
            AtmtName = FilePath & Atmt.FileName
            Debug.Print AtmtName ' Print on Immediate Window
            Atmt.SaveAsFile AtmtName
        Next
    End If
End Sub
  

Filter Items 在将一个或多个项目添加到指定集合时发生。 当一次将大量项目添加到文件夹时,此事件不会运行。 Microsoft Visual Basic Sc​​ripting Edition(VBScript)中不提供此事件。

  

Items.ItemAdd Event (Outlook) 是使用Find方法或FindNext方法迭代集合中特定项目的替代方法。如果存在少量项目,则Find或FindNext方法比过滤更快。如果集合中有大量项目,则Restrict方法会明显加快,特别是如果预计只能找到大集合中的少数项目。

  DASL过滤器支持的

Items.Restrict method 包括等效,前缀,短语和子字符串匹配。请注意,当您对Subject属性进行过滤时,将忽略诸如“RE:”和“FW:”之类的前缀。

对于想要编辑注册的人,请参阅Filtering Items Using a String Comparison

答案 1 :(得分:0)

根据定义,禁用运行脚本时无法运行脚本。如果可以,那么全球各地的黑客都会高兴,人们不得不停止使用Outlook进行公司邮件。

没有内置功能可以执行您想要的操作。

可以使用插件来完成,比如Kutools: https://www.extendoffice.com/product/kutools-for-outlook.html

出于安全考虑,您的IT部门可能不想让您这样做。你不应该试图规避你不理解其含义的规则。