Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: VBA MS Office

Программирования для MS Office кроме ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: vba vs outlook
 
 автор: joka   (28.10.2007 в 16:13)   личное сообщение
 
 

Помогите кто сможет. я только начал разбираться во взаимодействии outlook и vba. Стоит задача необходимо получив письмо зайти в него, и если там есть вложения нажать на специальную кнопку (которую надо на панели инструментов как то добавить). к этой кнопке надо привязать код ВБА который сохранит все вложения в определенную папку (как написать код?). как это сделать кто подскажет?

заранее благодарен!

  Ответить  
 
 автор: osmor   (29.10.2007 в 09:56)   личное сообщение
 
 

Письмо представляет из себя объект MailItem у которого есть коллекция Attachments, которая содержит все присоединенные файлы (набор объектов Attachment)
У которого, в свою очередь, есть метод SaveAsFile (путь)вот пример из Help :

Sub SaveAttachment()
    Dim myOlApp As Outlook.Application
    Dim myInspector As Outlook.Inspector
    Dim myItem As Outlook.MailItem
    Dim myAttachments As Outlook.Attachments
    Set myOlApp = CreateObject("Outlook.Application")
    Set myInspector = myOlApp.ActiveInspector
    If Not TypeName(myInspector) = "Nothing" Then
        If TypeName(myInspector.CurrentItem) = "MailItem" Then
            Set myItem = myInspector.CurrentItem
            Set myAttachments = myItem.Attachments
            'Prompt the user for confirmation
            Dim strPrompt As String
            strPrompt = "Are you sure you want to save the first attachment in the current item to the C:\ folder? If a file with the same name already exists in the destination folder, it will be overwritten with this copy of the file."
            If MsgBox(strPrompt, vbYesNo + vbQuestion) = vbYes Then
                myAttachments.Item(1).SaveAsFile "C:\" & _
                myAttachments.Item(1).DisplayName
            End If
        Else
            MsgBox "The item is of the wrong type."
        End If
    End If
End Sub

тут сохраняется только первый влоденный файл, нужно только добавить перебор всей коллекции Attachments

  Ответить  
 
 автор: joka   (29.10.2007 в 22:31)   личное сообщение
 
 

привет спасибо за помощь.. сам покопался написал примерно тоже

Sub obrabotka()

Dim objOutlook As Object
Dim myinspector As Outlook.Inspector
Dim myattachments As Outlook.Attachments
Dim namestr As String

Set objOutlook = CreateObject("Outlook.Application")
Set myinspector = objOutlook.ActiveInspector
If Not TypeName(myinspector) = "Nothing" Then
Set myattachments = myinspector.CurrentItem.Attachments
d = myattachments.Count
While d > 0
namestr = myattachments.Item(d).DisplayName
myattachments.Item(d).SaveAsFile "C:\" & namestr
d = d - 1
Wend
Else
MsgBox "There is no active inspector."
End If

End Sub

не мог бы ты меня чуть чуть просвятить???
у тебя написана связка
Set myItem = myInspector.CurrentItem
Set myAttachments = myItem.Attachments

я это написал сразу в одну строку и работает, я просто неправильно что то понимаю? или так тоже можно?

а вот следующая задачка... необходимо также в цикле отправить эти приложения на печать если они являются вордовскими файлами... не поможешь? я читаю и не пойму покатит тут PrintOut? необходимо ли создавать объект ворда и открывать там приложения?

  Ответить  
 
 автор: osmor   (31.10.2007 в 08:37)   личное сообщение
 
 


Set myattachments = myinspector.CurrentItem.Attachments

Вместо

Set myItem = myInspector.CurrentItem
Set myAttachments = myItem.Attachments 

вполне допустимо
Просто вы не выделяете в отдельную переменную объект Item
Если вам не нужно поизводить никаких операция с самим письмом, то можно и не выделять.
По поводу воложений, точно не знаю, но мне кажется, что придется все сохранить на диск ( что вы уже сделали), и уже с диска печатать используя Ворд или через Ole или через DDE

  Ответить  
 
 автор: joka   (31.10.2007 в 10:32)   личное сообщение
 
 

спасибо! буду еще вопросы спрошу!

а вот кстати есть один, правда немного не в эту тему.

у меня есть vba-код. я из него гружу форму: форма1.show
дальше там отдно текстовое поле, пусть text1
пользователь вводит значение и нажимает "ОК"
там я делаю форма1.Hide таким образом вываливаюсь назад в свой код
а дальше я проверяю это текстовое поле на рельность введеного пути проверяю с помошью FolderExists. если такой путь есть все ок..
а вот если я ввожу туда бред например "ппп" то снова делаю форма1.show
но после ввода почему-то не сбрасывается предыдущее значение текстового поля формы.

может я вообще не правильно ее подгружаю и использую? что посоветуешь? извини за дурацкие вопросы.. я только начинаю во все этом разбираться:)

  Ответить  
 
 автор: osmor   (31.10.2007 в 10:41)   личное сообщение
 
 

с формами outlook никогда не работал.
А что значит?
"но после ввода почему-то не сбрасывается предыдущее значение текстового поля формы"
Почему оно должно сбрасываться?
может после поверки и перед новым показом формы принудительно присвоить ему значение "" (пустая строка) ?

  Ответить  
 
 автор: joka   (31.10.2007 в 10:45)   личное сообщение
 
 

да я тоже думаю можно пустым значением обнулить...
пробовал форма1.Repaint, думал она обнуляет все значения в форме (именно думал потому что хелп не читал), но не получилось, видимо придеться обнулитть присвоением пустых значений!

спасибо тебе за помощь!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList