【问题标题】:Executing VBA Script without access to the "Run a Script" rule in Outlook 2016执行 VBA 脚本而不访问 Outlook 2016 中的“运行脚本”规则
【发布时间】:2020-06-23 08:03:11
【问题描述】:

我在工作的计算机上安装了 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

【问题讨论】:

  • 你能解释一下规则应该做什么吗?
  • 糟糕!不敢相信我把它漏掉了。对不起!我编辑了问题...当我收到一封主题行中包含某些字词的电子邮件时,我希望规则/脚本将文件附件(在电子邮件内)保存到我计算机上的文件夹中。跨度>

标签: vba outlook outlook-filter


【解决方案1】:

将您的“Outlook 规则/运行脚本”替换为 Items.ItemAdd Event (Outlook) 和 Items.Restrict Method (Outlook) 到 Filter Items主题行。

例子

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

Items.ItemAdd Event (Outlook) 在将一个或多个项目添加到指定集合时发生。 当大量项目同时添加到文件夹时,此事件不会运行。此事件在 Microsoft Visual Basic 脚本版 (VBScript) 中不可用。


Items.Restrict method 是使用 Find 方法或 FindNext 方法迭代集合中特定项目的替代方法。如果项目数量较少,则 Find 或 FindNext 方法比过滤更快。如果集合中有大量项目,Restrict 方法会明显更快,尤其是在大型集合中只需要找到少数项目的情况下。


DASL 过滤器支持的

Filtering Items Using a String Comparison 包括等价、前缀、短语和子字符串匹配。请注意,当您对主题属性进行过滤时,会忽略诸如“RE:”和“FW:”之类的前缀。


想要修改 reg 的朋友请看https://stackoverflow.com/a/48778903/4539709


【讨论】:

  • 你真是个天才,0m3r!太感谢了!这完美地工作,我也能够设置我的其他每周报告。现在,我的数据库(使用这些链接的 Excel 电子表格)每周都会自动更新。我非常感谢您的帮助和良好的信息!
【解决方案2】:

根据定义,当运行脚本被禁用时,您将无法运行脚本。如果可以的话,全球的黑客会很高兴,人们将不得不停止使用 Outlook 来处理公司邮件。

没有内置函数可以做你想做的事。

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

出于安全原因,您的 IT 部门可能不希望您这样做。您不应试图规避您不了解其含义的规则。

【讨论】:

  • 嗨 HackSlash - 我确实理解并考虑了我正在尝试做的事情的影响。我什至已经和我的副总裁讨论过我的意图。这只是公司在试图改变事情时效率低下的问题......所有脚本都没有被禁用 - 只是位于规则向导中的“运行脚本”操作。无论如何,我不认为会有一个内置的-in 功能,但肯定必须有另一种方法来做到这一点..? (KuTools 是怎么做到的?)
  • KuTools 正在运行脚本。允许附加组件执行此操作。因此,您可能无法安装该插件。
  • 注意:如果可以,您可以使用自己的代码编译自己的插件并直接使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
相关资源
最近更新 更多