powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Outlook is Access
29 сообщений из 29, показаны все 2 страниц
Outlook is Access
    #39687017
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Уважаемый форум,

понимаю, что бОян, но все-таки. Простая задача: база на Аксе должна создавать и показывать пользователю мыло, используя Outlook. Офис 2016. Использую код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
    Set outlObj = CreateObject("Outlook.Application")
    Set outlItem = outlObj.CreateItem(olMailItem)
    outlItem.Importance = olImportanceNormal
....
    outlItem.Attachments.Add "C:\Users\" & Environ("USERNAME") & "\" & flname & ".xlsx"
    outlItem.Subject = "Something..."    
    outlItem.Body = "Bla-bla-bla"
    outlItem.Display


Проблема в том, что если Outlook в это время не запущен, то все виснет и ничего не происходит. Если Outlook запущен - все работает на ура. Есть варианты, как побороть?
...
Рейтинг: 0 / 0
Outlook is Access
    #39687052
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFK, olImportanceNormal это константа аутлука-нужно заменить если связывание позднее используете.
outlItem.Importance = 1
...
Рейтинг: 0 / 0
Outlook is Access
    #39687313
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
alecko, спасибо, заменю, но это не решает проблему, потому что при запущеном аутлуке все отрабатывает нормально.
...
Рейтинг: 0 / 0
Outlook is Access
    #39687357
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно это поможет. Попробуй
Код: vbnet
1.
2.
3.
4.
    Set outlObj = CreateObject("Outlook.Application")
    outlObj.Session.GetDefaultFolder(6).Display   
    Set outlItem = outlObj.CreateItem(olMailItem)
...
...
Рейтинг: 0 / 0
Outlook is Access
    #39687427
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
zimkon, никакого эффекта - если аутлук закрыт, виснет на этой команде. Если открыт - показывает окно, но если аутлук открыт, то и без этой команды все работает отлично.
...
Рейтинг: 0 / 0
Outlook is Access
    #39687443
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IFK,
Предположительно, он не виснет, а ждет пока загрузится OutLook (грузится же он у тебя, наверное, не так быстро, да и аутентификацию в OutLook-e ещё пройти нужно). Проверить бы всё это надо.
...
Рейтинг: 0 / 0
Outlook is Access
    #39687444
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
zimkon, не, виснет - явно видно. Аутлук иконка появляется в трее, но она странная - с шестеренкой. Если подвести мышь к ней, появляется сообщение, что типа приложение занято другим пользователем и т.д.

Поборол принудительным запуском аутлука с проверкой:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#If Win64 Then
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
lpClassName As String, ByVal lpWindowName As String) As LongLong
#Else
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
lpClassName As String, ByVal lpWindowName As String) As Long
#End If


Public Function outlook_start()
If FindWindow("OpusApp", vbNullString) = False Then shell "Outlook.exe", vbMinimizedNoFocus
End Function



Не очень изящно, но работает. Еще бы побороть разворачивание аутлука в полноэкранный режим после старта и было бы вообще зашибись. :(
...
Рейтинг: 0 / 0
Outlook is Access
    #39687446
Uralec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IFK,

Офис 2007 и вызов из экселя, но работает и с закрытым и с открытым Outlook

Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = "test@mail.ru"
.Subject = "test"
.Body = "test"
.Attachments.Add "test.xls"
.Display
.Send
End With
...
Рейтинг: 0 / 0
Outlook is Access
    #39687471
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IFK Аутлук иконка появляется в трее, но она странная - с шестеренкой. Если подвести мышь к ней, появляется сообщение, что типа приложение занято другим пользователем и т.д.

Возможно в запущенных процессах, если посмотреть через диспетчер задач, у тебя висит не одна копия OutLook.exe (после твоих неудачных попыток запуска), все эти процессы надо бы завершить через диспетчер задач.
Вообще, чтобы не плодить такие паразитные процессы , при запуске Outlook надо бы пользоваться такой конструкцией
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
    On Error Resume Next
    Set objOutlook = GetObject(, "Outlook.Application")
    On Error GoTo 0
    
    If objOutlook Is Nothing Then
    
        'Outlook isn't already running - create a new instance...
        Set objOutlook = CreateObject("Outlook.Application")


т.е. если OutLook уже загружен, пользуемся GetObject, в противном случае CreateObject
...
Рейтинг: 0 / 0
Outlook is Access
    #39687480
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
zimkon, поверял в диспетчере задач, не висит там куча процессов. Винда 10 как-то это разруливает, по-видимому.
...
Рейтинг: 0 / 0
Outlook is Access
    #39687485
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IFK,
А смотрел ты именно в запущенных процессах, а не в запущенных приложениях?
...
Рейтинг: 0 / 0
Outlook is Access
    #39687528
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
zimkon, да, и в процессах и в приложениях. Я просто закрывал открытый аутлук, проверял список процессов и приложений и стартовал создание емейла из Акса - висло.
...
Рейтинг: 0 / 0
Outlook is Access
    #39687540
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IFK,
А если в общий модуль запихнуть типа (при закрытом OutLook)
Код: vbnet
1.
2.
3.
4.
5.
Public Function ttt()
    Dim olApp As Object
    Set olApp = CreateObject("Outlook.Application")
    olApp.Session.GetDefaultFolder(6).Display '6 = olFolderInbox
End Function


И выполнить это в окне Immediate редактора VBA, тоже будет виснуть?
...
Рейтинг: 0 / 0
Outlook is Access
    #39687547
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
zimkon, так тоже работает и с тем же эффектом - аутлук стартует и разворачивается на весь экран. :)
...
Рейтинг: 0 / 0
Outlook is Access
    #39687550
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
zimkon, пардон, игнор последнего поста - так не работает. :(
...
Рейтинг: 0 / 0
Outlook is Access
    #39687554
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IFKzimkon, так тоже работает и с тем же эффектом - аутлук стартует и разворачивается на весь экран. :)
Значит какая-то ошибка у тебя в коде. Ищи, используй отладчик и пр.
...
Рейтинг: 0 / 0
Outlook is Access
    #39687559
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IFKzimkon, пардон, игнор последнего поста - так не работает. :(
Странно...
...
Рейтинг: 0 / 0
Outlook is Access
    #39687579
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zimkonт.е. если OutLook уже загружен, пользуемся GetObject, в противном случае CreateObject

сейчас у себя проверил на win10(офис 10). Раньше так же себя вел на win xp офис 07
при попытке открыть просто через ярлык, открывает второй экземпляр оутлука.
И когда программно через CreateObject
было поведение такое же.

Экземпляры здесь не причем.
...
Рейтинг: 0 / 0
Outlook is Access
    #39687584
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан,
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
      ' получаем объект Outlook----------------------------------------------------------------------------------1
30    Set OL_App = CreateObject("Outlook.Application")

      'получаем Namespace   'OL_NameSpace.SyncObjects.Item(1).Start   ' команда отправить/получить outlook
40    Set OL_NameSpace = OL_App.GetNamespace("MAPI")

      ' получаем ссылку на папку Входящие
50    Set OL_myItems = OL_NameSpace.GetDefaultFolder(6).Items



по ходу NameSpace забыли
...
Рейтинг: 0 / 0
Outlook is Access
    #39687637
IFK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IFK
Гость
Игортан, нафига? Это же Акс, а не VB.net или я что-то пропустил?
...
Рейтинг: 0 / 0
Outlook is Access
    #39687711
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFK, может outlook не знает куда сохранить?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Set objOutlook = CreateObject("Outlook.Application")
Set objOutlookMsg = objOutlook.CreateItem(0)
Set mpfInbox = objOutlook.Session.GetDefaultFolder(5)' отправленные
Set mpf = mpfInbox.Folders.Item("Контрагентам")
With objOutlookMsg
' ...

 .Sensitivity = 0
        Set .SaveSentMessageFolder = mpf' сохраняем сюда наше сообщение
        .Display
end with

...
Рейтинг: 0 / 0
Outlook is Access
    #39687737
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IFKИгортан, нафига? Это же Акс, а не VB.net или я что-то пропустил?
Так для него Outlook это не он же сам, хоть и близкий родственник.
В Excel же тоже нужно указать не только книгу, но и страницу.
Да и объектная модель у Outlook отличается от аксовской.

А этот кусок кода я взял из своего рабочего модуля по работе с почтой.
...
Рейтинг: 0 / 0
Outlook is Access
    #39687895
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попроще, использовать топорный ДуЦмд, куда нить туда вставить:

Код: vbnet
1.
DoCmd.SendObject , "vlozhenie imya" , , "komu", "v kopii", , "naznanie pisma", "tekst pisma"



Выручает, когда особо не надо заморачиваться с отправкой писем.

CreateObject("Outlook.Application") использую для отправки красивых писем только, когда таблицу HTML нужно нарисовать в теле письма, или стили к тексту применить. CreateObject("Outlook.Application") больше жрет памяти и медленней работает.
...
Рейтинг: 0 / 0
Outlook is Access
    #39687942
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, у него есть существенное ограничение: Attachment только один можно прицепить, да и сохраняется не в нужной папке. многие один раз сделали класс для работы с аутлуком универсальный, и все.
...
Рейтинг: 0 / 0
Outlook is Access
    #39688228
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleckoСергей Лалов, у него есть существенное ограничение: Attachment только один можно прицепить, да и сохраняется не в нужной папке. многие один раз сделали класс для работы с аутлуком универсальный, и все.

Та не, прицепить можно сколько угодно, создайте коллекцию, напихайте сколько угодно файлов в эту коллекцию и потом эту коллекцию подставьте в attachment)

А вот по поводу сохранения не в той папке немного не понятно, не может такого быть) Можете ваш весь код выложить, попробуем отрихтовать.
...
Рейтинг: 0 / 0
Outlook is Access
    #39688239
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

а вот про коллекцию было интересно!
нужно будет у себя стрельнуть попробовать
...
Рейтинг: 0 / 0
Outlook is Access
    #39688300
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, ТС не я.
кстати код в котором я сохраняю письмо куда нужно прикладывал выше.
разбирался с этим sendobject раньше-вот впечатления написал, он отправляет объекты базы - отчеты, формы, модули... вобщем для отчетов в пдф мне не подошел.
...
Рейтинг: 0 / 0
Outlook is Access
    #39690184
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
м.б. политика безопасности запрещает извне вызывать оутлук через OLE - антиспам какойнить настроен.

А почему createobject а не getobject ? У офисного работника оутлук часто открыт целый день - зачем второй экземпляр приложения запускать?
...
Рейтинг: 0 / 0
Outlook is Access
    #39690229
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитал вопрос ТС. Потом обсуждение. Не понял, что он хочет: отправлять письма из Access через Outlook? Или полностью работать с почтой из Access через Outlook, т.е обрабатывать и поступившие письма?
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Outlook is Access
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]