Ваша проблема:
Set sub_olFolder = objNS.GetDefaultFolder(olFolderInbox)
У вас может быть только один почтовый ящик по умолчанию. Ваш почтовый ящик по умолчанию явно находится в учетной записи Exchange. Вам нужно будет явно указать имя хранилища IMAP для доступа к папке «Входящие».
Когда вы посмотрите на панель папок, вы увидите что-то вроде этого:
Xxxxxxxxxxx
Drafts
Deleted Items
Inbox
: :
Yyyyyyyyy
Drafts
Deleted Items
Inbox
SUBFOLDER
: :
Xxxxxxxxxxx и Yyyyyyyyy - названия магазинов. Магазины - это файлы, в которых Outlook сохраняет все ваши электронные письма, элементы календаря, задачи и так далее. Насколько я понимаю, вы ДОЛЖНЫ иметь один магазин на одну учетную запись. Вы также можете иметь столько дополнительных магазинов, сколько пожелаете. У меня есть магазины, названные для моих двух учетных записей: «Архив», «Тест» и многие другие.
Попробуйте:
Set sub_olFolder = objNS.Folders("Yyyyyyyyy").Folders("Inbox")
Где «Yyyyyyyyy» - это название магазина (как оно отображается на панели папок), содержащего подпапку, к которой вы хотите получить доступ.
Возможно, мне следует добавить, что я написал бы:
Set Itms = Session.Folders("Yyyyyyyyy").Folders("Inbox").Folders("SUBFOLDER").Items
«Session» и «NameSpace» должны быть идентичными. Я использую сеанс, потому что он избавляет от необходимости создавать пространство имен, и потому что давным-давно у меня произошел сбой в NameSpace, который я не смог диагностировать.
Если вам не нужен доступ к хранилищу, папке «Входящие» или SUBFOLDER каким-либо другим способом, вам не нужны переменные для них. Начиная с конечного родителя (сеанса), вы можете связать имена детей, внуков и т. Д. На любую глубину.
Будьте осторожны, связывая свойства вместе, как это. (1) Чтобы получить правильную строку, может потребоваться некоторое время. (2) Я видел пример строк свойств, где действительно трудно определить, к чему к нему обращаются. Если вы вернетесь к этому макросу через 12 месяцев, помните ли вы, что означает эта строка? Если кто-то еще должен поддерживать ваш макрос, поймет ли он, что вы сделали? Если сомневаетесь, сделайте это просто.
Добавлено из-за ошибки в исходном ответе
Я не могу проверить свой ответ. Попробуйте следующее, чтобы проверить мое предложение.
Замените «Yyyyyyyyy» на имя вашего магазина IMAP, а затем введите его в своем «Немедленном окне».
? Session.Folders("Yyyyyyyyy").Name
Переводчик должен ответить именем магазина IMAP. Если это работает, попробуйте:
? Session.Folders("Yyyyyyyyy").Folders("Inbox").Name
Переводчик должен ответить Входящие. Если это работает, попробуйте:
? Session.Folders("Yyyyyyyyy").Folders("Inbox").Folders("SUBFOLDER").Name
Переводчик должен ответить ПОДДЕЛКУ. Если это работает, попробуйте:
? Session.Folders("Yyyyyyyyy").Folders("Inbox").Folders("SUBFOLDER").Items(1).ReceivedTime
Переводчик должен ответить с датой и временем предыдущего письма в подпапке. Если это работает, мой ответ должен работать. Если что-либо из перечисленного не работает, пожалуйста, ответьте с подробным объяснением того, что не удалось