关于使MS Outlook中基于[From]公式的自定义列可排序的技术问询
关于使MS Outlook中基于
[From]公式的自定义列可排序的技术问询 嘿,这个问题我刚好碰到过,来给你捋清楚!
首先得说清楚为什么你用[From]公式创建的自定义列没法排序:Outlook里的公式驱动自定义列是动态计算字段,它不是实实在在存储在邮件属性里的值,每次查看都要重新计算一遍。而排序需要系统能快速批量检索字段值,这种计算型列自然就不支持排序啦。
那怎么解决呢?给你两个实用方案,看你需求选:
方案一:直接去掉「External」标签(最省心)
其实你根本不需要创建自定义列!Outlook本身就有隐藏「External」标签的设置,改完之后原生的「发件人」列既能去掉标签,又能正常排序:
- 打开Outlook,点击顶部的「文件」→「选项」→「邮件」
- 往下翻找到「外部邮件」板块,取消勾选「在外部发件人的名称旁显示‘外部’标签」
- 回到邮件列表,原生的「发件人」列就不会再显示External标记了,排序功能完全正常!
方案二:自定义存储字段(适合有额外需求的情况)
如果你因为某些原因必须用自定义列,那可以通过VBA脚本把发件人信息同步到一个存储型自定义字段里,这样就能排序了:
- 创建自定义文本字段:
- 右键点击邮件列表的列标题,选择「字段选择器」
- 点击「新建」,类型选「文本」,给它起个名字比如「自定义发件人」,点确定
- 添加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
- 按下
- 添加自定义列到列表:
- 回到邮件列表,右键列标题→「字段选择器」,找到你创建的「自定义发件人」字段,拖到列里就行
这个字段是实实在在存储在邮件里的文本值,完全支持排序,显示内容和你之前的公式列一致。
- 回到邮件列表,右键列标题→「字段选择器」,找到你创建的「自定义发件人」字段,拖到列里就行
备注:内容来源于stack exchange,提问作者dvdabehr
相关产品推荐
相关产品推荐

