Вопрос или проблема
Я правильно определил и назначил все переменные, но все равно получаю ошибку “Объект необходим” (ошибка 424) в цикле по вложениям ниже:
Sub apscan()
Dim objItems As Outlook.Items
Dim objItem As Object
Dim objMail As Outlook.MailItem
Dim strMonth As String
Dim dReceivedTime As Date
Dim strReceivedDate As String
Dim i, n As Long
Dim strMsg As String
Dim nPrompt As Integer
Dim ns As Namespace
Dim folder As MAPIFolder
Dim Loc As Range
Dim atmt As Outlook.Attachment
Dim atmts As Outlook.Attachments
ThisWorkbook.Activate
Set olApp = CreateObject("Outlook.Application")
Set ns = olApp.GetNamespace("MAPI")
Set folder = ns.Folders("AP").Folders("Входящие")
Set objItems = folder.Items
objItems.SetColumns("ReceivedTime")
objItems.Sort "[ReceivedTime]", True
For Each objItem In objItems
For Each atmt In objItem.Attachments
Debug.Print atmt.Filename
Next atmt
Next objItem
End Sub
Sub apscan()
Dim olApp As Object
Dim ns As Object
Dim folder As Object
Dim objItems As Object
Dim objItem As Object
Dim atmt As Object
Dim i As Long
Set olApp = CreateObject("Outlook.Application")
Set ns = olApp.GetNamespace("MAPI")
Set folder = ns.GetDefaultFolder(6) ' 6 = olFolderInbox
Set objItems = folder.Items
objItems.Sort "[ReceivedTime]", True
For Each objItem In objItems
If TypeName(objItem) = "MailItem" Then
For Each atmt In objItem.Attachments
Debug.Print atmt.Filename
Next atmt
End If
Next objItem
Set atmt = Nothing
Set objItem = Nothing
Set objItems = Nothing
Set folder = Nothing
Set ns = Nothing
Set olApp = Nothing
End Sub
Ответ или решение
Ошибка 424 в VBA при работе с вложениями в Outlook: Необходимый объект
Ошибка "Object required (Error 424)" в VBA часто возникает, когда код пытается использовать объект, который не был инициализирован или ошибочно типизирован. В контексте работы с Outlook, эта ошибка может проявиться, если обработчик не считает элемент почты объектом MailItem
, или если объект вложения не инициализирован должным образом.
Анализ вашего кода
Давайте детально разберём ваш код и выделим ключевые моменты, которые могли привести к ошибке.
-
Инициализация объектов:
В вашем первом примере кода вы пытаетесь создать объект Outlook следующим образом:Set olApp = CreateObject "Outlook.Application")
Правильная форма записи должна быть:
Set olApp = CreateObject("Outlook.Application")
-
Работа с пространством имен:
В первой версии кода вы используетеGetNamespace("МАРІ")
. Скорее всего, здесь произошла опечатка. Корректное написание должно бытьGetNamespace("MAPI")
. -
Получение папки:
При использовании методаFolders
, убедитесь, что указаны правильные имена папок. Также неплохо подстраховаться проверкой существования папок перед попыткой к ним обратиться. -
Проверка типа объекта:
Перед циклом по вложениям стоит убедиться, чтоobjItem
является именно объектомMailItem
. Если не применять проверку типа, это может вызвать ошибку при попытке доступа к вложениям. Ваш код уже содержит такую проверку во втором примере:If TypeName(objItem) = "MailItem" Then
-
Отладка и обработка ошибок:
Для лучшего понимания источника проблемы можно добавить обработку ошибок с выводом сообщения, что именно пошло не так:On Error Resume Next ' Ваш код... If Err.Number <> 0 Then Debug.Print "Произошла ошибка: " & Err.Description Err.Clear End If On Error GoTo 0
Полный пересмотр кода
Приведём улучшенный и исправленный вариант вашего кода:
Sub apscan()
Dim olApp As Object
Dim ns As Object
Dim folder As Object
Dim objItems As Object
Dim objItem As Object
Dim atmt As Object
On Error GoTo ErrorHandler
Set olApp = CreateObject("Outlook.Application")
Set ns = olApp.GetNamespace("MAPI")
Set folder = ns.GetDefaultFolder(6) ' 6 = olFolderInbox
Set objItems = folder.Items
objItems.Sort "[ReceivedTime]", True
For Each objItem In objItems
If TypeName(objItem) = "MailItem" Then
For Each atmt In objItem.Attachments
Debug.Print atmt.Filename
Next atmt
End If
Next objItem
Cleanup:
Set atmt = Nothing
Set objItem = Nothing
Set objItems = Nothing
Set folder = Nothing
Set ns = Nothing
Set olApp = Nothing
Exit Sub
ErrorHandler:
Debug.Print "Ошибка: " & Err.Description
Resume Cleanup
End Sub
Заключение
Убедитесь, что вы проверяете каждую строку на наличие синтаксических ошибок и используете правильные типы данных. Обработка ошибок поможет понять, где именно возникла проблема, если что-то пойдет не так. Надеюсь, это поможет вам устранить ошибку "Object required (Error 424)" и успешно работать с вложениями в Outlook.