Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1752to1756
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Outlookzugriff aus Scheduled Task

Outlookzugriff aus Scheduled Task
22.04.2020 11:55:33
Michael
Hallo zusammen,
ich habe hier ein Problem, bei dem ich irgendwie nicht weiterkomme.
Die Situation ist die folgende:
Eine Excel-Datei prüft auf einer Datenbank bestimmte Datensätze ab und soll beim Überschreiten bestimmter Fristen eine E-Mail an spezifizierte Empfänger senden. Bislang wurde die Exceldatei in regelmäßigen Abständen durch eine C#.NET-Anwendung geöffnet und hat dann automatisch die Prüfung begonnen.
Das funktioniert alles wunderbar. Auch wenn ich die Excel-Datei manuell öffne und den Prüfprozess abfeuere. Kein Problem.
In einem Klassenobjekt habe ich mir ein Outlook-Objekt konstruiert. Dort wird beim Initialisieren regulär die lokale Outlook-Instanz angesprochen.
Das Outlook-Objekt dazu wird über die folgende Funktion geholt:

Public Function g_startOutlook() As Object
Dim oOutlook As Object
Dim sAPPPath As String
Dim objOutlook As Outlook.Application
On Error GoTo Error_Handler_Exit
Call g_writeToProcessTracking(ThisWorkbook.Path & "log.txt", Now() & ": Start Outloook" &    _
_
_
vbCrLf, True)
If Not g_objOutlookObject Is Nothing Then
Set oOutlook = g_objOutlookObject
Else
'sAPPPath = g_GetAppExePath("outlook.exe")
'Call Shell(sAPPPath, vbMaximizedFocus)
If oOutlook Is Nothing Then Call g_writeToProcessTracking(ThisWorkbook.Path & "log.txt", _
_
_
Now() & ": clsOutlookMail: Try to create Outlook-Object" & vbCrLf, True)
Set oOutlook = CreateObject("Outlook.Application")
Set g_objOutlookObject = oOutlook
If oOutlook Is Nothing Then Call g_writeToProcessTracking(ThisWorkbook.Path & "log.txt", _
_
_
Now() & ": clsOutlookMail: oOutlook is nothing" & vbCrLf, True)
End If
If oOutlook Is Nothing Then Call g_writeToProcessTracking(ThisWorkbook.Path & "log.txt",  _
Now() & ": clsOutlookMail: oOutlook is nothing - return value" & vbCrLf, True)
Set g_startOutlook = oOutlook
Call g_writeToProcessTracking(ThisWorkbook.Path & "log.txt", Now() & ": Outloook started" &  _
_
_
vbCrLf, True)
'On Error Resume Next
'Set oOutlook = Nothing
Exit Function
Error_Handler_Exit:
On Error Resume Next
'Set oOutlook = Nothing
Call g_writeToProcessTracking(ThisWorkbook.Path & "log.txt", Now() & ": Start Outloook -  _
Error (" & Err.Description & ")" & vbCrLf, True)
Exit Function
End Function

Klappt auch wie gesat alles wunderbar. Nun gibt es das folgende Problem:
Die Anwendung läuft auf einem Server. Dieser kann aber aufgrund von Wartung öfter mal neu gestartet werden. Daher haben wir zunächst versucht die C#-Anwendung über ein Scheduled Task zu starten und zwar bei System-Startup. Also ohne, dass sich ein User einloggen muss. Die Anwendung startet dann zwar auch, öffnet auch Excel, aber aus Excel heraus wird dann offenbar kein Outlook geöffnet. Ok soweit.
Also sind wir hergeganen und haben die Excel-Datei mittels bat-Datei geöffnet, wobei die bat-Datei ebenfalls über eine Scheduled Task geöffnet wird. Das funktioniert auch soweit.
Nun gibt es zwei Probleme: Wenn Outlook irgendwie über eine Scheduled Task geöffnet wird, kann Excel über
GetObject(,"Outlook.Application")
nicht auf die Outlook-Instanz zugreifen. Liegt das evtl. daran, dass Outlook hier irgendwie nicht greifbar für Excel ist?
Über
CreateObject("Outlook.Application")
kann seltsamerweise keine Outlook-Instanz erzeugt werden. Mittels
Set oOutlook = new Outlook.Application
funktioniert es zwar, dann bleibt er aber beim Versuch ein neues Mailitem über
Set m_objMailObject = oOutlook.CreateItem(0)
zu erzeugen hängen und läuft nicht weiter. Ein Debug ist hier nicht möglich, da die Anwendung ja auch nicht sichtbar ist. Deshalb werden bestimmte Code-Schritte über
g_writeToProcessTracking
auch in ein Log geschrieben.
Ich habe auch versucht Outlook über die Shell zu öffnen. Funktioniert auch, aber ich kann die Outlook-Instanz nicht abgreifen.
Bei der anzen Scheduled-Task-Sache laufen die Anwendungen alle im Hintergrund. Sie müssen halt auch funktionieren, wenn kein User angemeldet ist.
Habt ihr vielleicht eine Idee, woran das liegen könnte? Oder ob man irgendwie auch auf die Outlook-Instanz zugreifen könnte, die im Hinterrund gestartet oder erzeugt wurde?
Vielen Dank im Voraus und bleibt gesund!

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Outlookzugriff aus Scheduled Task
22.04.2020 13:47:02
volti
Hallo Michael,
ein bisschen komplex das Ganze und da ich nicht drin bin, habe ich bzgl. Excel erst mal keine Idee.
Aber hast Du mal probiert, auf Outlook anderweitig zuzugreifen, z.B. über ein VBS-Script?
Wenn es damit funktioniert, weiß man wenigstens, dass es nur an Excel liegt.

Const ByValue = 1
Const oMailItem = 0
Dim oAppOL
Dim oMail
Dim bWasOpen
On Error Resume Next
Set oAppOL = GetObject(,"Outlook.Application")
If oAppOL Is Nothing Then
  Set oAppOL = CreateObject("Outlook.Application")
  MSGBOX "Outlook gestartet"
Else
  bWasOpen = true
  MSGBOX "Outlook schon aktiv"
End If
Set oMail = oAppOL.CreateItem(0)
If Not oMail Is Nothing then
  MSGBOX "Mail kreiert"
  With oMail
Rem   .To = "guguck@t-online.de"
Rem   .Subject = "Hier der Betreff"
Rem   .Body = "was will ich schreiben "
Rem    .Attachments.Add "c:\einetestdatei.txt", 1, 1
Rem   .Send
  End With
End If
If bWasOpen = false Then oAppOL.quit
viele Grüße
Karl-Heinz

Anzeige
AW: Outlookzugriff aus Scheduled Task
22.04.2020 14:59:39
Michael
Hi,
danke für deine Antwort. Dein oben beschriebenes Vorgehen ist meinem allerdings sehr ähnlich. Das Problem besteht maßgeblich darin, dass die durch die Scheduled Task aufgerufene Outlook-Instanz offenbar nicht in dem Objektkatalog der laufenden Anwendungen existiert. Meine Vermutung ist, dass das eben durch die Task in eine "nicht greifbare" Session geschoben wird.
Wieso allerdins kein richtiger Zugriff möglich ist, wenn die Anwendung durch Excel direkt aufgerufen wird (durch new Outlook.Application) ist mir nicht klar. Und CreateObject führt zu einem Fehler, wenn Excel durch die Scheduled Task geöffnet wurde.
Ist ne ziemlich doofe Sache :(
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige