Недавно я был перенесен из 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).
Прежде чем пытаться решить мою проблему, не беспокойтесь: я написал новый работающий код (см. ниже). Сначала я подумал, что онбыл ненадежным, и я попытался добавить собственный сертификат для проекта VBA, но это ничего не дало. Я пришел к выводу, что по какой-то причине я теперь должен установить значение напоминания, хотя я использовал эту конструкцию во многих циклахранее. Это, кажется, подтверждается работающим мною кодом, который явно устанавливает значение напоминания.
Оба кодовых набора имеют следующие объявления 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 и существует ли способ, которым старый код мог бы работать (с небольшими изменениями).
Я просмотрел " Что нового для VBA вOffice 2016"документация, но там нет ничего, что я мог бы ожидать, чтобы вызвать это изменение в поведении.
Мой вопрос:
- почему старый код больше не работает?
- Что изменилось и где я могу найтиподробнее об этом?
- Это действительно изменение из-за перехода с 32-битного на 64-битный Office?