Страницы: 1
RSS
Перебор папок Outlook, Перебор папок Outlook и сохранение вложений
 
Доброе!
На форуме уже были похожие темы, но у меня все уперлось в то, что не могу перебрать папки Аутлука 2019. Ни в Application.Session.Folders ни NameSpace.Folders, вообщем эти две папки РПРЦ и Чекмастер я нигде найти не могу.
Просю подсобить с этой проблемой
Изменено: Rizone - 23.08.2021 12:31:52
 
Цитата
Rizone написал:
вообщем эти две папки РПРЦ и Чекмастер я нигде найти не могу.Просю подсобить с этой проблемой
Я поискал у себя, тоже не смог найти. :-)
Rizone,  где у вас что уперлось?  Показать нет желания? А остальные папки находите?
По вопросам из тем форума, личку не читаю.
 
Да показывать то особо нечего, пробовал и так и сяк...
пробовал разными способами, найденными в инете. Сейчас в коде такие исправления:
Код
Public Sub SaveAttachments()
    Dim objOutlApp As Object, oNSpace As Object, oIncoming As Object
    Dim oIncMails As Object, oMail As Object, oAtch As Object, myFolder As Object
    Dim saveFolder As String
    Dim xx As Long
    
    'отключаем обновление экрана, чтобы наши действия не мелькали
    'Application.ScreenUpdating = False
    
    'получаем доступ к Оутлук
    Set objOutlApp = GetObject(, "outlook.Application")
    If objOutlApp Is Nothing Then
        Set objOutlApp = CreateObject("outlook.Application")
        IsNotAppRun = True
    End If
    
    'Получаем доступ к папкам почты
    Set oNSpace = objOutlApp.GetNamespace("MAPI")
    'Подключаемся к папке Входящие
    Set myFolder = oNSpace.GetDefaultFolder(olFolderContacts)
    Set oIncoming = myFolder.Folders("РПРЦ")
    'Удаленные ==> oNSpace.GetDefaultFolder(3)
    'Исходящие ==> oNSpace.GetDefaultFolder(4)
    'Отправленные ==> oNSpace.GetDefaultFolder(5)
    'Входящие ==> oNSpace.GetDefaultFolder(6)
    
    saveFolder = "C:\Payments\"
    'Проверка наличия папки платежей. Если нет, то создаем
    If Dir(saveFolder, vbDirectory) = "" Then
        MkDir saveFolderDorogi
    End If

    On Error GoTo ErrHandler
     
    'получаем коллекцию писем Входящие (включая подпапки)
    Set oIncMails = oIncoming.Items
    'For xx = 1 To oIncMails.Folders.Count
        'If oIncMails.Folders(xx).Name = "РПРЦ" Then
            'здесь уже перебираем все письма этой папки
            For Each oMail In oIncMails.Folders(xx).Items
                If oMail.UnRead Then
                    'вызываем приведенную Вами функцию
                    oMail.SaveAsFile saveFolder & oMail.DisplayName
                End If
            Next
        'End If
    'Next
        
    'очищаем переменные
    Set oIncMails = Nothing
    Set oIncoming = Nothing
    Set oNSpace = Nothing
    Set objOutlApp = Nothing
    'возвращаем ранее отключенное обновление экрана
    'Application.ScreenUpdating = True
    
    'For Each mi In myFolder.Items.Restrict("[Unread]=TRUE")
    '   If mi.Class = olMail Then
    '      If mi.Attachments.Count = 0 Then
    '         For miNum = 1 To mi.Attachments.Count
    '            mi.SaveAsFile saveFolder & mi.DisplayName
    '         Next miNum
    '      End If
    '   End If
    'Next mi
    Exit Sub
     
ErrHandler:
    MsgBox (Err.Description)
    'Debug.Print (Err.Description)
    Debug.Print (Err.Number)
End Sub

Да, Входящие, например, находит
Т.е. можно было бы эти папки создать под Входящими и тогда доступ к ним можно получить, но этот вариант на крайняк )
Изменено: Rizone - 23.08.2021 13:02:58
 
это не корректно так как это не универсально но
Код
Set oIncoming = oNSpace.Folders(1).Folders("РПРЦ")

Folders(1) - это сессия или аккаунт, и его нужно определять иначе, я показал в лоб.
По вопросам из тем форума, личку не читаю.
 
Код
Sub FindParentFolder()
  
  Const olFolderInbox = 6
  Dim objOutlApp As Object
  Dim oIncoming As Object
  
  On Error Resume Next
  Set objOutlApp = GetObject(, "Outlook.Application")
  If Err Then Set objOutlApp = CreateObject("Outlook.Application")
  On Error GoTo 0
     
  Set oIncoming = objOutlApp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent.Folders("РПРЦ")
  Debug.Print oIncoming.Items.Count
  ' Дальше - перебор в папке oIncoming

End Sub
Изменено: ZVI - 24.08.2021 23:30:51
 
Спасибо большое за помощь!
Пока оставил такой вариант
Код
Public Sub SaveAttachments()
    Dim objOutlApp As Object, oNSpace As Object, oIncoming As Object
    Dim oIncMails As Object, oMail As Object, oAtch As Object, myFolder As Object
    Dim saveFolder As String
    
    Set objOutlApp = GetObject(, "outlook.Application")
    If objOutlApp Is Nothing Then
        Set objOutlApp = CreateObject("outlook.Application")
        IsNotAppRun = True
    End If
    
    Set oNSpace = objOutlApp.GetNamespace("MAPI")
    Set myFolder = oNSpace.GetDefaultFolder(olFolderContacts)
    Set oIncoming = oNSpace.Folders(1).Folders("РПРЦ")
    
    saveFolder = "C:\Payments\"
    If Dir(saveFolder, vbDirectory) = "" Then
        MkDir saveFolderDorogi
    End If

    On Error GoTo ErrHandler
     
    Set oIncMails = oIncoming.Items
    For Each oMail In oIncMails
        If oMail.UnRead Then
            For Each oAtch In oMail.Attachments
                oAtch.SaveAsFile saveFolder & oAtch.DisplayName
            Next
        End If
    Next
    
    Set oIncMails = Nothing
    Set oIncoming = Nothing
    Set oNSpace = Nothing
    Set objOutlApp = Nothing
    
    Exit Sub
     
ErrHandler:
    MsgBox (Err.Description)
    'Debug.Print (Err.Description)
    Debug.Print (Err.Number)
End Sub
Смущает только проверки на UnRead т.к. после выполнения придется тыкать в каждое письмо...
Ну, или, может просто уберу это условие и пусть каждый раз все выгружает...
Страницы: 1
Наверх