Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Outlook is Access  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 999
Уважаемый форум,

понимаю, что бОян, но все-таки. Простая задача: база на Аксе должна создавать и показывать пользователю мыло, используя Outlook. Офис 2016. Использую код:
    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 запущен - все работает на ура. Есть варианты, как побороть?
13 авг 18, 17:14    [21640869]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 453
IFK, olImportanceNormal это константа аутлука-нужно заменить если связывание позднее используете.
outlItem.Importance = 1
13 авг 18, 18:30    [21640990]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 999
alecko, спасибо, заменю, но это не решает проблему, потому что при запущеном аутлуке все отрабатывает нормально.
14 авг 18, 10:46    [21641451]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 100
Возможно это поможет. Попробуй
    Set outlObj = CreateObject("Outlook.Application")
    outlObj.Session.GetDefaultFolder(6).Display   
    Set outlItem = outlObj.CreateItem(olMailItem)
...
14 авг 18, 11:43    [21641580]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 999
zimkon, никакого эффекта - если аутлук закрыт, виснет на этой команде. Если открыт - показывает окно, но если аутлук открыт, то и без этой команды все работает отлично.
14 авг 18, 12:53    [21641746]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 100
IFK,
Предположительно, он не виснет, а ждет пока загрузится OutLook (грузится же он у тебя, наверное, не так быстро, да и аутентификацию в OutLook-e ещё пройти нужно). Проверить бы всё это надо.
14 авг 18, 13:25    [21641805]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 999
zimkon, не, виснет - явно видно. Аутлук иконка появляется в трее, но она странная - с шестеренкой. Если подвести мышь к ней, появляется сообщение, что типа приложение занято другим пользователем и т.д.

Поборол принудительным запуском аутлука с проверкой:
#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


Не очень изящно, но работает. Еще бы побороть разворачивание аутлука в полноэкранный режим после старта и было бы вообще зашибись. :(
14 авг 18, 13:29    [21641807]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
Uralec
Member

Откуда:
Сообщений: 19
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
14 авг 18, 13:30    [21641810]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 100
IFK
Аутлук иконка появляется в трее, но она странная - с шестеренкой. Если подвести мышь к ней, появляется сообщение, что типа приложение занято другим пользователем и т.д.

Возможно в запущенных процессах, если посмотреть через диспетчер задач, у тебя висит не одна копия OutLook.exe (после твоих неудачных попыток запуска), все эти процессы надо бы завершить через диспетчер задач.
Вообще, чтобы не плодить такие паразитные процессы , при запуске Outlook надо бы пользоваться такой конструкцией
    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
14 авг 18, 13:57    [21641851]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 999
zimkon, поверял в диспетчере задач, не висит там куча процессов. Винда 10 как-то это разруливает, по-видимому.
14 авг 18, 14:02    [21641862]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 100
IFK,
А смотрел ты именно в запущенных процессах, а не в запущенных приложениях?
14 авг 18, 14:06    [21641870]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 999
zimkon, да, и в процессах и в приложениях. Я просто закрывал открытый аутлук, проверял список процессов и приложений и стартовал создание емейла из Акса - висло.
14 авг 18, 14:54    [21641962]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 100
IFK,
А если в общий модуль запихнуть типа (при закрытом OutLook)
Public Function ttt()
    Dim olApp As Object
    Set olApp = CreateObject("Outlook.Application")
    olApp.Session.GetDefaultFolder(6).Display '6 = olFolderInbox
End Function

И выполнить это в окне Immediate редактора VBA, тоже будет виснуть?
14 авг 18, 15:19    [21641998]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 999
zimkon, так тоже работает и с тем же эффектом - аутлук стартует и разворачивается на весь экран. :)
14 авг 18, 15:26    [21642013]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 999
zimkon, пардон, игнор последнего поста - так не работает. :(
14 авг 18, 15:28    [21642017]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 100
IFK
zimkon, так тоже работает и с тем же эффектом - аутлук стартует и разворачивается на весь экран. :)

Значит какая-то ошибка у тебя в коде. Ищи, используй отладчик и пр.
14 авг 18, 15:31    [21642026]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 100
IFK
zimkon, пардон, игнор последнего поста - так не работает. :(

Странно...
14 авг 18, 15:40    [21642038]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 873
zimkon
т.е. если OutLook уже загружен, пользуемся GetObject, в противном случае CreateObject


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

Экземпляры здесь не причем.
14 авг 18, 15:56    [21642071]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 873
Игортан,
      ' получаем объект 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 забыли
14 авг 18, 16:00    [21642080]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 999
Игортан, нафига? Это же Акс, а не VB.net или я что-то пропустил?
14 авг 18, 16:55    [21642169]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 453
IFK, может outlook не знает куда сохранить?
+
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
14 авг 18, 18:43    [21642309]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 873
IFK
Игортан, нафига? Это же Акс, а не VB.net или я что-то пропустил?

Так для него Outlook это не он же сам, хоть и близкий родственник.
В Excel же тоже нужно указать не только книгу, но и страницу.
Да и объектная модель у Outlook отличается от аксовской.

А этот кусок кода я взял из своего рабочего модуля по работе с почтой.
14 авг 18, 20:17    [21642371]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
Сергей Лалов
Member

Откуда: Питер,Москва, Выборг, Светогорск
Сообщений: 1266
Можно попроще, использовать топорный ДуЦмд, куда нить туда вставить:

DoCmd.SendObject , "vlozhenie imya" , , "komu", "v kopii", , "naznanie pisma", "tekst pisma"


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

CreateObject("Outlook.Application") использую для отправки красивых писем только, когда таблицу HTML нужно нарисовать в теле письма, или стили к тексту применить. CreateObject("Outlook.Application") больше жрет памяти и медленней работает.
15 авг 18, 10:28    [21642629]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 453
Сергей Лалов, у него есть существенное ограничение: Attachment только один можно прицепить, да и сохраняется не в нужной папке. многие один раз сделали класс для работы с аутлуком универсальный, и все.
15 авг 18, 11:28    [21642725]     Ответить | Цитировать Сообщить модератору
 Re: Outlook is Access  [new]
Сергей Лалов
Member

Откуда: Питер,Москва, Выборг, Светогорск
Сообщений: 1266
alecko
Сергей Лалов, у него есть существенное ограничение: Attachment только один можно прицепить, да и сохраняется не в нужной папке. многие один раз сделали класс для работы с аутлуком универсальный, и все.


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

А вот по поводу сохранения не в той папке немного не понятно, не может такого быть) Можете ваш весь код выложить, попробуем отрихтовать.
15 авг 18, 15:46    [21643310]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить