Справочник переменных VBA для вложений Outlook Объект требуется (Ошибка 424)

Вопрос или проблема

Я правильно определил и назначил все переменные, но все равно получаю ошибку “Объект необходим” (ошибка 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, или если объект вложения не инициализирован должным образом.

Анализ вашего кода

Давайте детально разберём ваш код и выделим ключевые моменты, которые могли привести к ошибке.

  1. Инициализация объектов:
    В вашем первом примере кода вы пытаетесь создать объект Outlook следующим образом:

    Set olApp = CreateObject "Outlook.Application")

    Правильная форма записи должна быть:

    Set olApp = CreateObject("Outlook.Application")
  2. Работа с пространством имен:
    В первой версии кода вы используете GetNamespace("МАРІ"). Скорее всего, здесь произошла опечатка. Корректное написание должно быть GetNamespace("MAPI").

  3. Получение папки:
    При использовании метода Folders, убедитесь, что указаны правильные имена папок. Также неплохо подстраховаться проверкой существования папок перед попыткой к ним обратиться.

  4. Проверка типа объекта:
    Перед циклом по вложениям стоит убедиться, что objItem является именно объектом MailItem. Если не применять проверку типа, это может вызвать ошибку при попытке доступа к вложениям. Ваш код уже содержит такую проверку во втором примере:

    If TypeName(objItem) = "MailItem" Then
  5. Отладка и обработка ошибок:
    Для лучшего понимания источника проблемы можно добавить обработку ошибок с выводом сообщения, что именно пошло не так:

    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.

Оцените материал
Добавить комментарий

Капча загружается...