有时在 Outlook VBA 中获取“对象变量或未设置块变量”

Posted

技术标签:

【中文标题】有时在 Outlook VBA 中获取“对象变量或未设置块变量”【英文标题】:Getting "object variable or with block variable not set" within Outlook VBA sometimes 【发布时间】:2016-02-12 22:30:05 【问题描述】:

我有一个相当简单的 VBA 脚本,可以在 Outlook (2013) 中接受会议请求。它在大多数情况下都可以正常工作,但是对于某些会议请求,它在此行上给了我“对象变量或未设置块变量” 设置 oResponse = oAppt.Respond(olMeetingAccepted, True)

我试图查看不同的会议请求,以找出可能触发它的任何差异,但出于所有目的,它们看起来像是相同的请求(当然,它们来自具有不同主题和时间的不同发件人,但没有我可以看到它触发了失败)。

任何想法可能会发生什么?这是完整的 Sub(它由 Outlook 规则触发)

Sub AutoAcceptMeetings(oRequest As MeetingItem)

Dim senderName As String
Dim subjectName As String
Dim meetingTime As String
Dim senderContains As Integer
Dim subjectContains As Integer
Dim oResponse As MeetingItem
Dim oAppt As AppointmentItem
On Error GoTo debugs

If oRequest.MessageClass <> "IPM.Schedule.Meeting.Request" Then
    Exit Sub
End If

Set oAppt = oRequest.GetAssociatedAppointment(True)

senderName = oRequest.senderName
subjectName = oRequest.Subject


senderContains = InStr(1, senderName, "Gina")
'Her meeting invitations don't have a reminder set.
If (senderContains > 0) Then
    oAppt.ReminderSet = True
    oAppt.ReminderMinutesBeforeStart = 15
End If

senderContains = InStr(1, senderName, "Jim")

If (senderContains > 0)  Then 'I don't want a reminder
    oAppt.ReminderSet = False
    oAppt.BusyStatus = olTentative
    oAppt.Save
    Else 'useful meetings. accept and send response.
    meetingTime = oAppt.Start
    Set oResponse = oAppt.Respond(olMeetingAccepted, True)
    oResponse.Send
    MsgBox ("Meeting accepted " + subjectName + " from " + senderName + " for " + meetingTime)
End If

debugs:
If Err.Description <> "" Then MsgBox (Err.Description + " - Source: AutoAcceptMeetings")
End Sub

【问题讨论】:

那个错误意味着oAppt什么都不是,这似乎意味着oRequest没有AssociatedAppointment。不知道这意味着什么,但这就是我阅读错误的方式。 谢谢道格,那是有道理的。但是,我能够从 oAppt 正确获取 meetingTime(并且在我测试时正确打印出来)。 当然。你可以接受有错误的约会吗? (在前端)。 谢谢道格,我想这可能解释了它。我可以从前端很好地接受它,但这是发件人不期待回复的会议之一。所以,我只需要找出一个测试,看看它是否是其中之一。有什么想法吗? 这似乎可以解决问题。再次感谢道格! If (oAppt.ResponseRequested) Then 【参考方案1】:

所以,问题在于我试图向不需要任何响应的会议请求发送“响应”。在前端(前景),如果您接受会议,它会进入您的日历并且请求会被删除,但组织者没有响应(人们在邀请一大群人时会这样做,并且不一定关心知道谁参加)。

无论如何,对我来说,解决方案是在实际响应请求之前进行简单的检查。

If (oAppt.ResponseRequested) Then
    Set oResponse = oAppt.Respond(olMeetingAccepted, True)
    oResponse.Send
End If

【讨论】:

以上是关于有时在 Outlook VBA 中获取“对象变量或未设置块变量”的主要内容,如果未能解决你的问题,请参考以下文章

Excel vba 运行时错误 91 对象变量或未设置块

VBA 使用多标准从 Outlook 下载电子邮件附件

使用 VBA 宏选择和复制 Outlook 电子邮件正文

对象变量或块变量未设置访问vba [重复]

OutLook VSTO 获取当前活的邮件信息

EXCEL VBA - 对象变量或未设置块变量