为什么将宏 (Sub) 分配给 Button 在单独的模块中不起作用,尽管如果我将它放在 (ThisOutlookSession) 上它会起作用?

Why assigning a macro (Sub) to a Button is not working from a separate module , although it works if I put it on (ThisOutlookSession)?

I am using the below code to:将选中项目的所有附件保存到硬盘。
分配给 Path 变量的路径必须存在。
该宏会自动在该目录中创建一个以当前日期命名的子文件夹。
最终 Windows 文件资源管理器将使用该新目录打开。
问题,如果我将下面的代码放在单独的模块上,然后将其分配给功能区上的自定义按钮,
然后单击该按钮,结果根本没有执行任何操作,也没有出现任何错误, 虽然 如果我从代码 window 运行 它,它可以正常工作。
另外,如果我将所有子移动到 (ThisOutlookSession) 并将其分配给一个按钮,结果是宏从该按钮正确工作。
所以,我的问题是如何将这段代码保存在一个单独的模块中,并通过功能区上的按钮使其成为 运行?

Public Sub SaveAttachments2()
  Dim coll As VBA.Collection
  Dim obj As Object
  Dim Att As Outlook.Attachment
  Dim Sel As Outlook.Selection
  Dim Path$
  Dim i&
 
  Path = "d:\"
  Path = Path & Format(Date, "yyyy-mm-dd") & "\"
  On Error Resume Next
  MkDir Path
  On Error GoTo 0
 
  Set coll = New VBA.Collection
 
  If TypeOf Application.ActiveWindow Is Outlook.Inspector Then
    coll.Add Application.ActiveInspector.CurrentItem
  Else
    Set Sel = Application.ActiveExplorer.Selection
    For i = 1 To Sel.Count
      coll.Add Sel(i)
    Next
  End If
 
  For Each obj In coll
    For Each Att In obj.Attachments
      Att.SaveAsFile Path & Att.FileName
    Next
  Next
 
  Shell "Explorer.exe /n, /e, " & Path, vbNormalFocus
End Sub

您可以在任何模块中声明您的原始子程序,但在 QAT 按钮调用时使用 ThisOutlookSession 文件中的代理来调用它。

默认情况下,Outlook 仅监视默认的 ThisOutlookSession 模块以查找可分配给 QAT 按钮的订阅。