Office 16中的VBA不允许“ ObjectCollection中的对象”构造:为什么?

时间:2019-03-25 15:21:17

标签: excel vba outlook outlook-vba

我最近从Office 13(独立的32位)迁移到Office 16(Office 365,64位)和我现有的Excel宏之一,该宏可访问Outlook并计算活动提醒的数量。 Outlook提醒集合-失败:

  

运行时错误424:需要对象

此宏在迁移之前运行良好,并且使用与Microsoft关于Outlook的提醒对象(https://docs.microsoft.com/en-us/office/vba/api/outlook.reminders)上的Microsoft文档中的代码示例相同的构造。

在尝试解决我的问题之前,请不要担心:我编写了可以正常工作的新代码(请参见下文)。我最初的想法是,它是不受信任的,因此我尝试为VBA项目添加一个自我证书,但这没有任何作用。我得出的结论是,由于某种原因,即使我以前在很多循环中都使用过此构造,现在仍需要设置Reminder的值。我写的有效代码似乎证明了这一点,该代码显式设置了Reminder值。

两个代码集都具有以下Dim声明(问题不在此处):

Dim ReminderSet As Outlook.Reminders
    Set ReminderSet = oOutlook.Reminders
Dim TotalReminders As Integer
    TotalReminders = ReminderSet.Count
Dim Reminder As Outlook.Reminder
Dim ActiveReminderCount As Integer
    ActiveReminderCount = 0

失败的代码(但曾经可以使用,并且看起来像Microsoft文档中的代码一样):

If TotalReminders > 0 Then
    For Each Reminder In ReminderSet 'This is the line on which it fails
        If Reminder.IsVisible = True Then ActiveReminderCount = ActiveReminderCount + 1
    Next Reminder
End If

有效的代码:

If TotalReminders > 0 Then
    Dim i As Integer
    For i = 1 To TotalReminderSet
        Set Reminder = ReminderSet(i)
        If Reminder.IsVisible = True Then ActiveReminderCount = ActiveReminderCount + 1
    Next i
End If

虽然我有解决方案,但我发现新代码更麻烦。我想确切了解Office 2013之间的变化,以及是否有一种旧代码可以工作的方式(稍作修改)。

我浏览了“ What's new for VBA in Office 2016”文档,但没有发现我希望引起这种行为改变的内容。

我的问题是:

  • 为什么旧代码不再起作用?
  • 发生了什么变化,我在哪里可以找到更多信息?
  • 这实际上是由于从32位Office迁移到64位Office而引起的变化吗?

0 个答案:

没有答案