【问题标题】:SenderEmailType generates Class doesn't support Automation (Error 430)SenderEmailType 生成的类不支持自动化(错误 430)
【发布时间】:2022-08-09 10:08:01
【问题描述】:

该子例程在将新项目添加到 Outlook 邮件文件夹的指定项目集合时运行。子检查项目是否是邮件项目,然后检查电子邮件地址是否来自交换服务器。

指定 .SenderEmailType 属性时,代码会引发错误。

Private Sub olItems_ItemAdd(ByVal Item As Object)
    
    Dim my_olMail As Outlook.MailItem
    Dim olAtt As Outlook.Attachment
    Dim SMTPAddress As String
    Dim olAttFilter As String
    Dim fso As Object
    
    Set fso = CreateObject(\"Scripting.FileSystemObject\")
    
    If TypeName(Item) = \"MailItem\" Then
        
        Set my_olMail = Item
            
        If my_olMail.SenderEmailType = \"EX\" Then
            SMTPAddress = my_olMail.Sender.GetExchangeUser.PrimarySmtpAddress
        Else
            \'must be SMTP address if not EX
            SMTPAddress = my_olMail.SenderEmailAddress
        End If


End Sub

出现的错误: https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/class-doesn-t-support-automation-error-430

    标签: vba outlook


    【解决方案1】:

    Sender-related 仅在已发送项目上设置。因此,您需要检查 Sender 属性是否不是 Nothing(C# 中为 null),然后才尝试识别发件人类型:

    Private Sub Application_ItemSend(ByVal Item As Object, ByRef Cancel As Boolean) Handles application.ItemSend
    
        Dim mailItem As Outlook.MailItem = DirectCast(Item, Outlook.MailItem)
    
        Dim sender As Outlook.AddressEntry = mailItem.Sender
        Dim senderAddress As String = ""
    
        If sender IsNot Nothing AndAlso
           (sender.AddressEntryUserType = Outlook.OlAddressEntryUserType.olExchangeAgentAddressEntry OrElse _
            sender.AddressEntryUserType = Outlook.OlAddressEntryUserType.olExchangeRemoteUserAddressEntry) Then
            Dim exchangeUser As Outlook.ExchangeUser = sender.GetExchangeUser()
    
            If exchangeUser IsNot Nothing Then
                senderAddress = exchangeUser.PrimarySmtpAddress()
            End If
        Else
            Dim recipient As Outlook.Recipient = application.Session.CreateRecipient(mailItem.SenderEmailAddress)
            If recipient IsNot Nothing Then
                Dim exchangeUser As Outlook.ExchangeUser = recipient.AddressEntry.GetExchangeUser()
                If exchangeUser IsNot Nothing Then
                    senderAddress = exchangeUser.PrimarySmtpAddress()
                End If
            End If
    
            'check if senderAddress has been set with above code. If not try SenderEmailAddress
            If senderAddress = "" Then
                senderAddress = mailItem.SenderEmailAddress()
            End If
        End If
    
        MessageBox.Show(senderAddress)
    
    End Sub
    

    请参阅Check if Outlook SenderEmailType is exchange and set variable 了解更多信息。

    【讨论】:

    • 当我删除“my_olMail”变量时,我的原始代码有效。我只是用原始的Item 更改了对my_olMail 的所有引用
    • 很高兴示例代码帮助解决了问题!不要忘记标记答案。
    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 2019-04-27
    • 2010-12-11
    • 1970-01-01
    • 2017-01-19
    相关资源
    最近更新 更多