Автоматическое сохранение вложений определенных писем - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь написать макрос для автоматического сохранения определенных отчетов, которые мы получаем по электронной почте на работе. В другом отделе есть что-то очень похожее, так что я могу много раз использовать их код. Однако они не могли объяснить мне, что делают определенные части кода, и поиск в Google не был особенно полезен.

Если это поможет, я опубликую весь код, я оставил его, потому что а) Мне придется редактировать некоторые вещи (имена и другие c) и б) Я не думаю, что это актуально к моей проблеме.

Смысл кода в том, что при запуске макрос запускается; каждое новое письмо затем проверяется (отправителем; темой сообщения; вложениями). Мне трудно понять начальную часть кода, потому что я не очень разбираюсь в VBA и никогда не использовал VBA в Outlook.

Option Explicit

Private WithEvents olInboxItems As Items

Private Sub Application_Startup()
  Dim objNS As NameSpace
  Set objNS = Application.Session
  Set olInboxItems = objNS.GetDefaultFolder(olFolderInbox).Folders("reports").Items
  Set objNS = Nothing
End Sub

Private Sub olInboxItems_ItemAdd(ByVal Item As Object)

If Item.Attachments.Count > 0 Then

    ….

End Sub

Вопросы:

Private WithEvents olInboxItems As Items - Что означает или делает Private WithEvents? Я знаю о событиях в VBA, таких как открытие рабочей книги, но я не мог понять, что подразумевалось под этой строкой.

NameSpace: Проще говоря, что такое пространство имен? Что я прочитал, так это то, что в Outlook структура объекта отличается от структуры, скажем, Excel. Пространство имен находится чуть ниже уровня приложения. Если это правильно, то я думаю, что это достаточно хорошо для меня, но если у кого-нибудь есть аккуратное объяснение, я был бы признателен.

Зачем вам Set objNS = Nothing?

1 Ответ

2 голосов
/ 01 февраля 2020

Private WithEvents olInboxItems как элементы - что означает или делает Private WithEvents?

WithEvents Указывает, что одна или несколько объявленных переменных-членов относятся к экземпляру класса, который может вызывать events.

Чтобы создать обработчик событий для объектов Microsoft Outlook в Microsoft Visual Basi c, см.

Использование событий с автоматизацией MSDN

Использование Outlook Visual Basi c для приложений для ответа на события Outlook MSDN

NameSpace Проще говоря, что такое NameSpace?

Объект NameSpace (Outlook) представляет собой абстрактный root объект для любого источника данных и прямой доступ к хранилищу объектов.

Объект NameSpace (Outlook) MSDN

хороший пример кода

Option Explicit
Private WithEvents Items As Outlook.Items

Private Sub Application_Startup()
    Dim olNs As Outlook.NameSpace
    Set olNs = Application.GetNamespace("MAPI")

    Dim Inbox  As Outlook.MAPIFolder
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
    Set Items = Inbox.Items

End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
    If TypeOf Item Is Outlook.MailItem Then
        DoEvents
        '' call another sub
    End If
End Sub

Установка объекта в Nothing - { ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...