首页 > 解决方案 > 声明为变体的变量生成运行时错误 438 - 对象不支持 Outlook 的此属性或方法

问题描述

我有以下代码用于从 Outlook 导入电子邮件。

收到“outlookmail.receivedtime”行错误。

运行时错误 438 - 对象不支持此属性或方法

Sub getDataFromOutlook()
Dim OutlookApp As Outlook.Application
Dim OutlookNamespace As Namespace
Dim Folder As MAPIFolder
Dim OutlookMail As Variant
Dim i As Integer

Set OutlookApp = New Outlook.Application

Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")

Set Folder = OutlookNamespace.GetDefaultFolder(olFolderInbox)

i = 1

For Each OutlookMail In Folder.Items

If OutlookMail.ReceivedTime >= Range("From_Date").Value Then
    Range("Email_Subejct").Offset(i, 0) = OutlookMail.Subject
    Range("Email_Subejct").Offset(i, 0).Columns.AutoFit
    Range("Email_Subejct").Offset(i, 0).VerticalAlignment = xlTop
    Range("Email_Date").Offset(i, 0).Value = OutlookMail.ReceivedTime
    Range("Email_Date").Offset(i, 0).Columns.AutoFit
    Range("Email_Date").Offset(i, 0).VerticalAlignment = xlTop
    Range("Email_Sender").Offset(i, 0).Value = OutlookMail.SenderName
    Range("Email_Sender").Offset(i, 0).Columns.AutoFit
    Range("Email_Sender").Offset(i, 0).VerticalAlignment = xlTop
    Range("Email_Body").Offset(i, 0).Value = OutlookMail.Body
    Range("Email_Body").Offset(i, 0).Columns.AutoFit
    Range("Email_Body").Offset(i, 0).VerticalAlignment = xlTop
    i = i + 1
End If

Next OutlookMail

Set Folder = Nothing
Set OutlookNamespace = Nothing
Set OutlookApp = Nothing

End Sub

标签: vbaoutlook

解决方案


正如@Domenic 提到的,检查你是否真的有一个MailItem对象,而不是ReportItemor MeetingItem

要检查它是否为MailItem,请使用Class属性 -OlObjectClass.olMail消息为 43 ( )。TypeName方法比较贵。

If OutlookMail.Class = 43 Then

推荐阅读