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

关于使MS Outlook中基于[From]公式的自定义列可排序的技术问询

关于使MS Outlook中基于[From]公式的自定义列可排序的技术问询

嘿,这个问题我刚好碰到过,来给你捋清楚!

首先得说清楚为什么你用[From]公式创建的自定义列没法排序:Outlook里的公式驱动自定义列是动态计算字段,它不是实实在在存储在邮件属性里的值,每次查看都要重新计算一遍。而排序需要系统能快速批量检索字段值,这种计算型列自然就不支持排序啦。

那怎么解决呢?给你两个实用方案,看你需求选:

方案一:直接去掉「External」标签(最省心)

其实你根本不需要创建自定义列!Outlook本身就有隐藏「External」标签的设置,改完之后原生的「发件人」列既能去掉标签,又能正常排序:

  • 打开Outlook,点击顶部的「文件」→「选项」→「邮件」
  • 往下翻找到「外部邮件」板块,取消勾选「在外部发件人的名称旁显示‘外部’标签」
  • 回到邮件列表,原生的「发件人」列就不会再显示External标记了,排序功能完全正常!

方案二:自定义存储字段(适合有额外需求的情况)

如果你因为某些原因必须用自定义列,那可以通过VBA脚本把发件人信息同步到一个存储型自定义字段里,这样就能排序了:

  1. 创建自定义文本字段:
    • 右键点击邮件列表的列标题,选择「字段选择器」
    • 点击「新建」,类型选「文本」,给它起个名字比如「自定义发件人」,点确定
  2. 添加VBA自动同步脚本:
    • 按下Alt + F11打开VBA编辑器
    • 找到左侧的「ThisOutlookSession」,双击打开,粘贴下面的代码:
      Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
          Dim objNS As Outlook.NameSpace
          Dim objMail As Outlook.MailItem
          Dim arrEntryIDs() As String
          Dim i As Integer
          
          Set objNS = Application.GetNamespace("MAPI")
          arrEntryIDs = Split(EntryIDCollection, ",")
          
          For i = LBound(arrEntryIDs) To UBound(arrEntryIDs)
              Set objMail = objNS.GetItemFromID(arrEntryIDs(i))
              If objMail.Class = olMail Then
                  ' 同步发件人名称到自定义字段
                  On Error Resume Next ' 处理字段未创建的情况
                  objMail.UserProperties("自定义发件人").Value = objMail.SenderName
                  objMail.Save
                  On Error GoTo 0
              End If
          Next i
          
          Set objMail = Nothing
          Set objNS = Nothing
      End Sub
      
    • 保存后,重启Outlook
  3. 添加自定义列到列表:
    • 回到邮件列表,右键列标题→「字段选择器」,找到你创建的「自定义发件人」字段,拖到列里就行
      这个字段是实实在在存储在邮件里的文本值,完全支持排序,显示内容和你之前的公式列一致。

备注:内容来源于stack exchange,提问作者dvdabehr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 07:54:36