Войти

Показать полную графическую версию : Outlook VBA - обратиться к папке определённого аккаунта


tetrisussr@vk
14-10-2015, 16:09
Добрый день.
В outlook настроено несколько учётных записей Exchange. В одной из учётки настроено правило, которое кладёт письма с определённой темой в папку Test в своих входящих. Теперь мне нужно работать с письмами с этой папки.
Данный скрипт работает, если настроена одна учётка. Но если их несколько - он смотрит, есть ли папка в первой, если нет - пишет "объект не найден" и останавлиается.
Подскажите, пожалуйста, как могу обратиться к папке определённого ящика?
Заранее спасибо.

opel431
15-10-2015, 16:54
Наверное, прежде чем сохранять и перемещать файлы в цикле For..., нужно предусмотреть соблюдение неких условий - наличия нужной папки (файлов) в учетной записи. Если есть, выполняем процедуры сохранения и перемещения файлов, если нет, переходим к следующей учетной записи.
К примеру, на http://stackoverflow.com/questions/28730013/vba-check-if-folder-exists-works-only-when-there-is-a-file-in-the-folder был представлен такой простой вариант проверки наличия папки (if folder exist) на VBA len(dir("C:\Users\user\Desktop\Tests\tt", vbDirectory))возвращает число, большее 0, если папка существует, независимо от того, имеются ли в папке файлы или нет

tetrisussr@vk
16-10-2015, 10:55
Это я и хочу сделать, но как обратиться к директории нужного аккаунта - вот в чём вопрос.

Данным способом можно посмотреть все аккаунты.
Этим же способом я могу посмотреть к папке какого акка я обращаюсь в предыдущем коде. Но указать, какая именно учётная запись мне нужна - пока не понял как.


Sub Which_Account_Number()
'Don't forget to set a reference to Outlook in the VBA editor
Dim OutApp As Outlook.Application
Dim I As Long

Set OutApp = CreateObject("Outlook.Application")

For I = 1 To OutApp.Session.Accounts.Count
MsgBox OutApp.Session.Accounts.Item(I) & " : This is account number " & I
Next I
End Sub


Также нашёл, как можно отправить письмо используя нужный аккаунт.



Sub Mail_small_Text_Change_Account()
'Only working in Office 2007-2013
'Don't forget to set a reference to Outlook in the VBA editor
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Dim strbody As String

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(olMailItem)

strbody = "Hi there" & vbNewLine & vbNewLine & _
"This is line 1" & vbNewLine & _
"This is line 2" & vbNewLine & _
"This is line 3" & vbNewLine & _
"This is line 4"

On Error Resume Next
With OutMail
.To = "ron@debruin.nl"
.CC = ""
.BCC = ""
.Subject = "This is the Subject line"
.Body = strbody

'SendUsingAccount is new in Office 2007
'Change Item(1)to the account number that you want to use
.SendUsingAccount = OutApp.Session.Accounts.Item(1)

.Send 'or use .Display
End With
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing
End Sub

opel431
16-10-2015, 16:09
Имея исходные коды, можно для начала получить справку по функциям и процедурам представленных в нем и получить представление о том, как он работает . Но, если не судьба, тогда, лучше обратится к исходному материалу по программированию в Outlook - http://www.askit.ru/custom/vba_office/m13/13_01_outlook_vba_basics.htm

tetrisussr@vk
16-10-2015, 16:16
Что значит не судьба? Вы читали мои вопросы и комментарии или не судьба? К чему такой тон.
Я отлично понимаю что написано в каждой строчке этого кода. Хотите - вам напишу такой же, с блэкджеком.
Но как просмотреть папку определённого аккаунта - так и не нашёл.
У класса Application есть потомки:
Application -> Session -> Accounts -> Item - здесь можно посмотреть текущий аккаунт. Но как именно указать его - пока не доехал.
Но спасибо за отличный мануал.

opel431
16-10-2015, 17:56
Но спасибо за отличный мануал. »Это и значит, что если не судьба самому найти ответ, воспользуйтесь помощью друзей! А некий "тон" появляется там, где его хотят увидать.
Видишь суслика? Нет. А он есть!

tetrisussr@vk
17-10-2015, 14:56
Это и значит, что если не судьба самому найти ответ, воспользуйтесь помощью друзей! А некий "тон" появляется там, где его хотят увидать. »
Табличку сарказм дома забыл, извините.

Просто прочтите ещё раз ветку, пожалуйста. Я написал про конкретную проблему, описал свои шаги, что уже пытался сделать. Вы почему-то решили, что я вставил код с интернета и спросил вас "а где тут то, что мне нужно?".

Пока помогает только в настройках аутлука указать нужную учётную запись как по умолчанию. Если у кого-нибудь есть мысли по поводу того, как работать с конкретной учёткой через VBA (не отправлять письма, а именно смортреть иерархию) - был бы очень благодарен если поделитесь. Если пошлёте на technet - пусть будет так:)

PopeJoe
30-12-2015, 11:54
opel431, спасибо за ссылку - по запросу гуглу "vba outlook несколько учетных записей" нашлась эта тема и ваша ссылка.
+ F1 в MS Office и всё получилось!

tetrisussr@vk, дойдите до пункта 13.4 по предложенной Вам ссылке на мануал

GetSharedDefaultFolder() — этот метод делает то же, что и GetDefaultFolder(), но применяется тогда, когда у пользователя в Outlook открыты, кроме своего, еще и почтовые ящики других пользователей, и получить ссылку, например, на папку Inbox в определенном почтовом ящике.




© OSzone.net 2001-2012