Страницы: 1
RSS
Копирование вложений определенной папки в OUTLOOK, Задача: нужно макросом скопировать вложения опеределенной папки
 
Добрый день, жители планеты Excel.

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

Если уже есть подобная тема просьба перенести в нужную папку.

При запуске макроса ругается на фунцию, подскажите зачем нужна фукция saveAttachtoDisk? И как поправить макрос чтобы он при запуске обрабатывал опеределенную папку?
Код
For xx = 1 To oIncMails.Folders.Count
            If oIncMails.Folders(xx).Name = "с работы файлы." Then
                      ' здесь уже перебираем все письма этой папки
                For Each oMail In oIncMails.Folders(xx).Items
                      'вызываем приведенную Вами функцию
                      saveAttachtoDisk oMail
                Next
            End If
        Next

 
 
Цитата
Alina Exsel написал:
подскажите зачем нужна фукция saveAttachtoDisk?
При отсутствии таковой сложно сказать зачем она нужна, м.б. на сайте источнике данная функция присутствует.
Но смею предположить , что эта функция что-то сохраняет, исходя из перевода.
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, можете подсказать почему макрос ругается на функцию?


"Sub or Function not defined"
Изменено: Alina Exsel - 28.11.2018 10:17:51
 
Цитата
Alina Exsel написал:
почему макрос ругается на функцию?
Он ругается не на функцию, а на отсутствие процедуры или функции с названием saveAttachtoDisk  
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Alina Exsel написал:
Nordheim , можете подсказать почему макрос ругается на функцию?
Я же написал Вам:
Цитата
Nordheim написал:
При отсутствии таковой
Изменено: Nordheim - 28.11.2018 11:08:17
"Все гениальное просто, а все простое гениально!!!"
 
Михаил Лебедев, Nordheim, спасибо за пояснение. Поробую объявить функцию.
 
Подскажите, а можно сохранять файлв не через функцию а служебным словом? И каким? Хочу заменить saveAttachtoDisk oMail, на что то другое.

Попробовала объявить функцию, не помогло.
 
Цитата
Alina Exsel написал:
Хочу заменить saveAttachtoDisk oMail, на что то другое.
Дело в том, что saveAttachtoDisk - это макрос, которого у Вас нет. (А oMail - это аргумент данного макроса)
Вы можете просто поставить перед названием макроса одинарный апостроф (т.е. "закомментировать" строку).
Данный макрос был написан именно из-за того, что нет подходящего служебного слова.
А в приведенном Вами отрывке макросa указана только ссылка на макрос saveAttachtoDisk.

Почему бы Вам не обратиться напрямую к Щербакову Дмитрию? (The_Prist)
Изменено: Михаил Лебедев - 28.11.2018 13:15:59
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
PS
Макрос с таким названием (saveAttachtoDisk) встречается на просторах интернета, например - вот здесь http://opennotes.ru/news/avtomaticheskoe-kopirovanie-vlozhenij-iz-pisem-v-papku-po-nomeru-inn-ukazannomu-v-proizvolnom-meste/  
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Михаил Лебедев написал:
напрямую к Щербакову Дмитрию? (The_Prist)
потому что основной код взят у меня, а вот кусок с saveAttachtoDisk - это что-то другое и я к этому не имею отношения :) И зачем он здесь нужен я не очень понимаю.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Михаил Лебедев спасибо посмотрю.

Дмитрий спасибо за ваш макрос , а можно добавить в ваш макрос уточнение в какой папке перебирать?
К сожалению макрорекодера у outlook нет , посему не знаю как прописать конкретную папку. Можете подсказать? Интуитивно хочется приделать к вашему маросу
Код
 Set oIncoming = oNSpace.GetDefaultFolder.name ="Test"
    'Удаленные ==> GetDefaultFolder(3)
    'Исходящие ==> GetDefaultFolder(4)
    'Отправленные ==> GetDefaultFolder(5)
    'Входящие ==> GetDefaultFolder(6)     
 
Цитата
Alina Exsel написал:
не знаю как прописать конкретную папку
И при этом ссылаетесь на строки кода, которые явно поясняют какие номера папок к каким именно папкам Outlook относятся.
В статье есть более развернутый пример - с формой выбора учетной записи и конкретных папок этой учетное записи. Код в файле открыт - берите и изучайте.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 

Дмитрий спасибо

Прикладываю макрос вдруг кому пригодиться. Логика была правильная, только нужно развернуть вложенные папки

Код
'---------------------------------------------------------------------------------------
Sub SaveAttachedItemsFromOutlook()
    Dim objOutlApp As Object, oNSpace As Object, oIncoming As Object
    Dim oIncMails As Object, oMail As Object, oAtch As Object
    Dim IsNotAppRun As Boolean
    Dim sFolder As String, s As String
    Dim fld As Folder
    Const nameFolder = "test"
 
    
    
    'диалог запроса выбора папки с файлами
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    'отключаем обновление экрана, чтобы наши действия не мелькали
    Application.ScreenUpdating = False
    
    'подключаемся к Outlook
    On Error Resume Next
    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 oIncoming = oNSpace.GetDefaultFolder(6).Folders(nameFolder)
    
    'Удаленные ==> GetDefaultFolder(3)
    'Исходящие ==> GetDefaultFolder(4)
    'Отправленные ==> GetDefaultFolder(5)
    'Входящие ==> GetDefaultFolder(6)
    
    'получаем коллекцию писем Входящие(включая подпапки)
    Set oIncMails = oIncoming.Items
    'просматриваем каждое письмо
   For Each oMail In oIncMails
       'просматриваем каждое вложение письма
      For Each oAtch In oMail.Attachments
           'отбираем только файлы Excel
           If oAtch Like "*.pdf*" Then
               s = GetAtchName(sFolder & oAtch)
             oAtch.SaveAsFile s
           End If
       Next
   Next    'Если приложение Outlook было открыта кодом - закрываем
    If IsNotAppRun Then
        objOutlApp.Quit
    End If
    'очищаем переменные
    Set oIncMails = Nothing
    Set oIncoming = Nothing
    Set oNSpace = Nothing
    Set objOutlApp = Nothing
    'возвращаем ранее отключенное обновление экрана
    Application.ScreenUpdating = True
End Sub
'---------------------------------------------------------------------------------------
' Procedure : GetShName
' Purpose   : Функция получения уникального имени файла
'             если файл с именем s уже есть - добавляет номер в скобках
'---------------------------------------------------------------------------------------
Function GetAtchName(ByVal s As String)
    Dim s1 As String, s2 As String, sEx As String
    Dim lu As Long, lp As Long
    
    s1 = s
    lp = InStrRev(s, ".", -1, 1)
    If lp Then
        sEx = Mid(s, lp)
        s1 = Mid(s, 1, lp - 1)
    End If
    s2 = s
    lu = 0
    Do While (Dir(s2, 16) <> "")
        lu = lu + 1
        s2 = s1 & "(" & lu & ")" & sEx
    Loop
    GetAtchName = s2
End Function

Страницы: 1
Наверх