You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Outlook 2010中实现多脚本对应多规则自动保存供应商发票附件?

需求与问题

我在Windows 11上使用Outlook 2010担任应付会计,所有发票均通过邮件接收。我有大量供应商,希望创建规则将特定供应商邮件中的附件自动保存至对应文件夹(例如将joeshmo的邮件附件保存至「我的文档\joeshmo」)。

现有两个可用代码:

  • 选中邮件后运行的宏:可将所有附件保存至同一文件夹
  • 可在规则中调用的脚本

已重新启用Outlook对应版本的脚本功能,但在规则设置中选择「运行脚本」时,下拉列表仅显示ThisOutlookSession中的代码,VBA编辑器的模块代码不显示,且只能在ThisOutlookSession中粘贴一段代码。想为每个供应商创建对应的规则和脚本实现发票附件自动分类保存,询问该需求是否可行?目前只能先将所有附件保存至同一文件夹再整理,或通过规则为供应商邮件分配分类后按字母排序批量处理。

现有脚本代码:

Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim dateFormat
    dateFormat = Format(Now, "yyyy-mm-dd H-mm")
    saveFolder = "C:\Users\jenny\Documents\Attachments\outlook testing\test number one"
     For Each objAtt In itm.Attachments
          objAtt.SaveAsFile saveFolder & "\" & dateFormat & objAtt.DisplayName
          Set objAtt = Nothing
     Next
End Sub

可行解决方案

这个需求完全可以实现,无需为每个供应商编写单独脚本,只需一个通用逻辑+多个规则入口即可搞定,具体步骤如下:

1. 修改通用脚本(存放于ThisOutlookSession)

将脚本改成可根据供应商名称自动匹配文件夹的版本,既避免重复代码,又能让规则识别到对应入口:

' 通用核心逻辑:根据供应商名称保存附件
Private Sub SaveAttachToSupplierFolder(itm As Outlook.MailItem, supplierName As String)
    Dim objAtt As Outlook.Attachment
    Dim saveFolder As String
    Dim dateFormat As String
    
    ' 替换为你的「我的文档」基础路径
    saveFolder = "C:\Users\jenny\Documents\" & supplierName
    
    ' 自动创建文件夹(如果不存在)
    If Dir(saveFolder, vbDirectory) = "" Then
        MkDir saveFolder
    End If
    
    dateFormat = Format(Now, "yyyy-mm-dd H-mm")
    For Each objAtt In itm.Attachments
        ' 加时间戳避免文件名重复
        objAtt.SaveAsFile saveFolder & "\" & dateFormat & "_" & objAtt.DisplayName
        Set objAtt = Nothing
    Next
End Sub

' 每个供应商的规则调用入口(必须放在ThisOutlookSession才能被规则识别)
Public Sub SaveToJoeShmo(itm As Outlook.MailItem)
    SaveAttachToSupplierFolder itm, "joeshmo"
End Sub

Public Sub SaveToABCCompany(itm As Outlook.MailItem)
    SaveAttachToSupplierFolder itm, "ABCCompany"
End Sub

' 可继续添加更多供应商的入口,格式同上

2. 为每个供应商创建规则

  1. 打开Outlook规则向导→新建规则→选择「对我接收的邮件应用规则」
  2. 设置触发条件:比如「发件人是joeshmo@xxx.com」或「主题包含[JoeShmo 发票]」
  3. 设置操作:选择「运行脚本」,下拉列表中会显示对应供应商的入口(如SaveToJoeShmo)
  4. 完成规则设置并启用

关于模块代码不显示的原因

Outlook规则可调用的脚本必须满足两个硬性条件:

  • 必须是Public修饰的Sub过程,且参数只能为Outlook.MailItem类型
  • 必须存放于ThisOutlookSession模块中,普通模块内的代码不会出现在规则的脚本下拉列表里

通过「通用逻辑放普通模块+入口放ThisOutlookSession」的方式,既能保证代码复用,又能让规则识别到对应脚本。


内容的提问来源于stack exchange,提问作者Jenny Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:50:24