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

Outlook VBA代码触发运行时错误91(对象变量未设置)求助

Outlook VBA 运行时错误91(对象未设置)问题排查与解决

问题描述

接手的Outlook VBA代码此前运行正常,近期在执行语句 sSenderName = (OutItems(i).Sender.GetExchangeUser.PrimarySmtpAddress) 时触发运行时错误91(对象变量或With块变量未设置),代码未做任何修改。

错误原因

错误91的本质是链式调用中某个对象返回了Nothing:

  • 即使SenderEmailType为"EX",也不代表OutItems(i).Sender一定是有效对象(比如邮件发件人是已删除的Exchange账户、外部转发导致发件人信息不完整);
  • Sender.GetExchangeUser()也可能返回Nothing(比如Exchange服务器未同步该用户信息、邮件来自共享邮箱/公共文件夹)。

解决方案

在代码中添加对象存在性检查,避免直接链式调用,分步验证每个对象是否有效:

If TypeName(OutItems(i)) = "MailItem" Then
    If OutItems(i).SenderEmailType = "EX" Then
        Dim objSender As Outlook.AddressEntry
        Dim objExUser As Outlook.ExchangeUser
        
        ' 先获取Sender对象并检查有效性
        Set objSender = OutItems(i).Sender
        If Not objSender Is Nothing Then
            ' 再获取ExchangeUser对象并检查有效性
            Set objExUser = objSender.GetExchangeUser
            If Not objExUser Is Nothing Then
                sSenderName = objExUser.PrimarySmtpAddress
            Else
                ' 无法获取ExchangeUser时,用发件人名称作为备选
                sSenderName = OutItems(i).SenderName
            End If
        Else
            ' Sender对象为空时,直接使用SenderEmailAddress
            sSenderName = OutItems(i).SenderEmailAddress
        End If
    Else
        sSenderName = OutItems(i).SenderEmailAddress
    End If
End If

额外排查建议

  • 定位异常邮件:找到触发错误的具体邮件,手动查看发件人属性,确认Exchange用户信息是否能正常显示;
  • 清理缓存:重启Outlook或系统,清除Outlook缓存,解决临时的同步异常;
  • 检查权限:确认当前用户对Exchange服务器的访问权限未发生变化,是否能正常读取发件人信息;
  • 版本兼容:检查Outlook近期是否有版本更新,部分更新可能影响对象模型的调用逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:31:22