|
|
|
| Помогите кто сможет. я только начал разбираться во взаимодействии outlook и vba. Стоит задача необходимо получив письмо зайти в него, и если там есть вложения нажать на специальную кнопку (которую надо на панели инструментов как то добавить). к этой кнопке надо привязать код ВБА который сохранит все вложения в определенную папку (как написать код?). как это сделать кто подскажет?
заранее благодарен! | |
|
| |
|
|
|
| Письмо представляет из себя объект 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 | |
|
| |
|
|
|
| привет спасибо за помощь.. сам покопался написал примерно тоже
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? необходимо ли создавать объект ворда и открывать там приложения? | |
|
| |
|
|
|
|
Set myattachments = myinspector.CurrentItem.Attachments
|
Вместо
Set myItem = myInspector.CurrentItem
Set myAttachments = myItem.Attachments
|
вполне допустимо
Просто вы не выделяете в отдельную переменную объект Item
Если вам не нужно поизводить никаких операция с самим письмом, то можно и не выделять.
По поводу воложений, точно не знаю, но мне кажется, что придется все сохранить на диск ( что вы уже сделали), и уже с диска печатать используя Ворд или через Ole или через DDE | |
|
| |
|
|
|
| спасибо! буду еще вопросы спрошу!
а вот кстати есть один, правда немного не в эту тему.
у меня есть vba-код. я из него гружу форму: форма1.show
дальше там отдно текстовое поле, пусть text1
пользователь вводит значение и нажимает "ОК"
там я делаю форма1.Hide таким образом вываливаюсь назад в свой код
а дальше я проверяю это текстовое поле на рельность введеного пути проверяю с помошью FolderExists. если такой путь есть все ок..
а вот если я ввожу туда бред например "ппп" то снова делаю форма1.show
но после ввода почему-то не сбрасывается предыдущее значение текстового поля формы.
может я вообще не правильно ее подгружаю и использую? что посоветуешь? извини за дурацкие вопросы.. я только начинаю во все этом разбираться:) | |
|
| |
|
|
|
| с формами outlook никогда не работал.
А что значит?
"но после ввода почему-то не сбрасывается предыдущее значение текстового поля формы"
Почему оно должно сбрасываться?
может после поверки и перед новым показом формы принудительно присвоить ему значение "" (пустая строка) ? | |
|
| |
|
|
|
| да я тоже думаю можно пустым значением обнулить...
пробовал форма1.Repaint, думал она обнуляет все значения в форме (именно думал потому что хелп не читал), но не получилось, видимо придеться обнулитть присвоением пустых значений!
спасибо тебе за помощь! | |
|
| |