Nano Hash - криптовалюты, майнинг, программирование

Outlook: обработка ошибки скрытого вложения Property Accessor

У меня есть сценарий, который проверяет все письма, поступающие в общий почтовый ящик. Он проверяет тип вложения и игнорирует скрытые вложения (например, изображения внутри сообщения). Он отлично работает на моем компьютере, но когда я устанавливал его на компьютер пользователя, иногда он выдавал такую ​​ошибку:

Run-time error '-2147221233 (8004010f)':
The property "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B" is unknown or cannot be found.

Я поискал в Интернете и нашел причину - некоторые вложения не имеют свойства скрытого вложения (возможно). Но как бороться с этой проблемой? Я попытался сделать обработчик ошибок, но он заставляет скрипт работать некорректно. Основная идея скрипта - принимать письма только с вложениями в формате PDF, а с текущим обработчиком ошибок он иногда принимает письма, содержащие вложения другого типа.

Вот часть кода, проверяющая вложения:

Private Sub objItems_ItemAdd(ByVal Item As Object)
Const PR_ATTACHMENT_HIDDEN As String = "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B"

Dim myAtt As Outlook.Attachment
Dim allPdf As Boolean
Dim hidNum As Integer

allPdf = True
hidNum = 0

Dim pa As PropertyAccessor

Dim objWatchFolder As Outlook.Folder
Set objNS = Application.GetNamespace("MAPI")

Dim Recip As Outlook.Recipient
Set Recip = objNS.CreateRecipient("[email protected]")

Set objWatchFolder = objNS.GetSharedDefaultFolder(Recip, olFolderInbox)


For Each myAtt In Item.Attachments
        Debug.Print myAtt.DisplayName
        Set pa = myAtt.PropertyAccessor

        On Error GoTo Handler

        If Not pa.GetProperty(PR_ATTACHMENT_HIDDEN) Then
            If Right(LCase(myAtt.FileName), 4) <> ".pdf" Then
                allPdf = False
            End If
        Else
            hidNum = hidNum + 1
        End If
NextAtt:
    Next myAtt

If allPdf = False Or Item.Attachments.Count = hidNum Then
    Item.Move objWatchFolder.Parent.Folders("Error")
End If


Set Item = Nothing
Set myAtt = Nothing
Set pa = Nothing
Set objWatchFolder = Nothing
Set Recip = Nothing

Exit Sub

Handler:
Resume NextAtt

End Sub

Думаю, проблема в том, что после ошибки он просто игнорирует вложение, вызвавшее ошибку, и переходит к следующему. Могу ли я проверить тип прикрепленного файла в обработчике ошибок?

А что, если скрытое вложение не имеет свойства скрытого вложения? Это вообще возможно? Это сделало бы скрипт бесполезным, если бы не было другого способа отличить скрытые вложения от остальных.

20.08.2019

Ответы:


1

Да, исключение сделано намеренно, и вам необходимо с ним справиться. Что, конечно, беспорядочно в VBA.

Используйте on error resume next / Err.Clear / Err.Number / Err.Description - см. https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/err-object

20.08.2019
  • Я не знаю, как использовать это в моей ситуации. Я сделал что-то вроде On Error GoTo Handler, Handler: If Err.Number ‹› 0 Then If Right (LCase (myAtt.FileName), 4) ‹› .pdf Then allPdf = False End If End If Resume NextAtt 22.08.2019
  • Пробовать при ошибке Возобновить далее / Err.Clear / вызвать PropertyAccessor / проверить Err.Number 22.08.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..