Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: SG05 am März 22, 2016, 18:50:04

Titel: Automatisierungsfehler - Ein Aufruf im Messagefilter ist unzulässig
Beitrag von: SG05 am März 22, 2016, 18:50:04
Hallo zusammen,

habe ein kleines Problem und bitte um Unterstützung.

Ich benutze ein PopUp-Formular um Meldungen zu erfassen. Bei Schließen über ein Button, soll folgendes passieren:
1. Prüfung, ob alle Felder gefüllt sind
2. Wenn nicht, Meldung und Sprung in das Feld
3. Wenn alles gefüllt, Bezeichnungsfeld sichtbar machen (Bitte um etwas Geduld)
4. Aktualisieren der Daten (Speichern)
5. Senden an eine E-Mailadresse
6. Schließen des Formulars

If IsNull(LfdMeldungWer) or IsNull(..... Then
    MsgBox ("DE= Pflichtfelder wurden nicht ausgefüllt" ), vbCritical, ""
    DoCmd.GoToControl "LfdMeldungWer"
    Else
    Me!T_Geduld.Visible = True
    Forms!For_Meldung_Anlegen.Refresh
    eMailMeldung Me!Maildadresse01
    DoCmd.Close acForm, "For_Meldung_Anlegen"
End If

Folgender Code ist unter "eMailMeldung" hinterlegt:

Public Function eMailMeldungAnlegen(EMail As String, Optional Projekt)
    Dim olApp As Outlook.Application
    Dim olNamespace As NameSpace
    Dim objMailItem As MailItem
    Dim objFolder As mapiFolder
    Dim rs As DAO.Recordset
   

    Set olApp = CreateObject("Outlook.Application")
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set objFolder = olNamespace.GetDefaultFolder(olFolderInbox)
    Set objMailItem = objFolder.Items.Add(olMailItem)
    With objMailItem
   
    If Forms!For_Meldung_Anlegen!LfdMeldungsartNr.Column(7) = "HS" Then
        .To = Forms!For_Hauptmenue!Maildadresse01
        .CC = Forms!For_Hauptmenue!Maildadresse02
    End If
       
    If Forms!For_Meldung_Anlegen!LfdMeldungsartNr.Column(7) = "WW" Then
        .To = Forms!For_Hauptmenue!Maildadresse02
        .CC = Forms!For_Hauptmenue!Maildadresse01
    End If       
        .Subject = "Meldung : " & Forms!For_Meldung_Anlegen!LfdMeldungsartNr.Column(1)
        .Body = "Wer          : " & Forms!For_Meldung_Anlegen!LfdMeldungWer.Column(2) & vbLf & vbLf & _
"-----------------------------------------------------------------------------------------"
        .Send
End With
    olApp.ActiveWindow
End Function

Folgende Meldung wird immer mal wieder Angezeigt:
"Automatisierungsfehler ein Aufruf im Messagefilter ist unzulässig"
und die DB lässt sich nur noch "Hart" schließen , da der "Close-Befehl" nicht mehr ausgeführt wird.

Ich benutze eine Back- und Frondend DB 2002-2003, Outlook 2010 und der Zugriff erfolgt über Remote auf einen Terminalserver MS2012.

Ich hoffe Ihr könnt mir einen Tipp geben, wie ich das Problem lösen kann.

Danke im voraus.
Titel: Re: Automatisierungsfehler - Ein Aufruf im Messagefilter ist unzulässig
Beitrag von: DF6GL am März 22, 2016, 20:43:23
Hallo,


versuch mal:
.
.
.
Dim rs As DAO.Recordset

     Set olApp = New Outlook.Application
     Set objMailItem= objOutlook.CreateItem(olMailItem)
    With objMailItem
.
.
.

        .To = CStr(Forms!For_Hauptmenue!Maildadresse01)
        .CC = CStr(Forms!For_Hauptmenue!Maildadresse02)
.
.
.
Titel: Re: Automatisierungsfehler - Ein Aufruf im Messagefilter ist unzulässig
Beitrag von: SG05 am März 23, 2016, 17:57:43
Hallo DF6GL

danke für die Antwort.

Nach Änderung erhalte ich folgende Meldung:
"Objekt erforderlich"

Sende Dir mal den gesamten Code:

Public Function eMailMeldungAnlegen(EMail As String, Optional Projekt)
   
    Dim olApp As Outlook.Application
    Dim olNamespace As NameSpace
    Dim objMailItem As MailItem
    Dim objFolder As mapiFolder
    Dim rs As DAO.Recordset
   

    Set olApp = New Outlook.Application
    Set objMailItem = objOutlook.CreateItem(olMailItem)
    With objMailItem
   
    If Forms!For_Meldung_A!LfdMeldungsartNr.Column(7) = "HS" Or Forms!For_Meldung_A!LfdMeldungsartNr.Column(7) = "GS" Then
        .To = CStr(Forms!For_A_Hauptmenue!InfoMailSM)
        .CC = CStr(Forms!For_A_Hauptmenue!InfoMailPC) & "; " & CStr(Forms!For_A_Hauptmenue!InfoMailTL)
    End If
       
    If Forms!For_Meldung_A!LfdMeldungsartNr.Column(7) = "MA" Or Forms!For_Meldung_A!LfdMeldungsartNr.Column(7) = "WA" Then
        .To = CStr(Forms!For_A_Hauptmenue!InfoMailBS)
        .CC = CStr(Forms!For_A_Hauptmenue!InfoMailSM) & "; " & CStr(Forms!For_A_Hauptmenue!InfoMailPC) & "; " & CStr(Forms!For_A_Hauptmenue!InfoMailTL)
    End If
       
    If Forms!For_Meldung_A!LfdMeldungsartNr.Column(7) = "VV" Then
        .To = CStr(Forms!For_A_Hauptmenue!InfoMailPC)
        .CC = CStr(Forms!For_A_Hauptmenue!InfoMailSM) & "; " & CStr(Forms!For_A_Hauptmenue!InfoMailTL)
    End If
       
    If Forms!For_Meldung_A!LfdMeldungsartNr.Column(7) = "HWI" Then
        .To = CStr(Forms!For_A_Hauptmenue!InfoMailPC)
        .CC = CStr(Forms!For_A_Hauptmenue!InfoMailSM) & "; " & CStr(Forms!For_A_Hauptmenue!InfoMailTL)
    End If
       
        .Subject = "Meldung : " & Forms!For_Meldung_A!LfdMeldungsartNr.Column(1)
        .Body = "Wer          : " & Forms!For_Meldung_A!LfdMeldungWer.Column(2) & " " & Forms!For_Meldung_A!LfdMeldungWer.Column(1) & vbLf & vbLf & _
                "Wann       : " & Forms!For_Meldung_A!MeldungWannD & "  /  " & Format(Forms!For_Meldung_A!MeldungWannZ, "hh:nn") & " Uhr" & vbLf & vbLf & _
                "Wo           : " & Forms!For_Meldung_A!LfdOrteNr.Column(1) & vbLf & vbLf & _
                "Inventar    : " & Forms!For_Meldung_A!LfdInventarNr.Column(2) & vbLf & vbLf & _
                "Inventarteil: " & Forms!For_Meldung_A!LfdInventarteilNr.Column(1) & vbLf & vbLf & _
                "Störung     : " & Forms!For_Meldung_A!LfdInventarstoerungNr.Column(1) & vbLf & vbLf & _
                "Was          : " & Forms!For_Meldung_A!MeldungWas & vbLf & vbLf & _
                "Warum      : " & Forms!For_Meldung_A!MeldungWarum & vbLf & vbLf & _
                "-----------------------------------------------------------------------------------------"
        .Display
    End With
    olApp.ActiveWindow
End Function


Titel: Re: Automatisierungsfehler - Ein Aufruf im Messagefilter ist unzulässig
Beitrag von: MaggieMay am März 23, 2016, 18:34:08
Hallo,

vermutlich musst du die nicht deklarierte Variable "objOutlook" durch "olApp" ersetzen damit das läuft.

Die vielen Ifs ersetzt du besser durch Select-Case, das ist viel übersichtlicher:
    With objMailItem
    Select Case Forms!For_Meldung_A!LfdMeldungsartNr.Column(7)
    Case "HS", "GS"
        .To = CStr(Forms!For_A_Hauptmenue!InfoMailSM)
        .CC = CStr(Forms!For_A_Hauptmenue!InfoMailPC) & "; " & CStr(Forms!For_A_Hauptmenue!InfoMailTL)
    Case "MA", "WA"
        .To = CStr(Forms!For_A_Hauptmenue!InfoMailBS)
        .CC = CStr(Forms!For_A_Hauptmenue!InfoMailSM) & "; " & CStr(Forms!For_A_Hauptmenue!InfoMailPC) & "; " & CStr(Forms!For_A_Hauptmenue!InfoMailTL)
    Case "VV"
        .To = CStr(Forms!For_A_Hauptmenue!InfoMailPC)
        .CC = CStr(Forms!For_A_Hauptmenue!InfoMailSM) & "; " & CStr(Forms!For_A_Hauptmenue!InfoMailTL)
    Case "HWI" Then
        .To = CStr(Forms!For_A_Hauptmenue!InfoMailPC)
        .CC = CStr(Forms!For_A_Hauptmenue!InfoMailSM) & "; " & CStr(Forms!For_A_Hauptmenue!InfoMailTL)
    End Select


PS:
Code bitte immer in Code-Tags einpacken!
Titel: Re: Automatisierungsfehler - Ein Aufruf im Messagefilter ist unzulässig
Beitrag von: SG05 am März 23, 2016, 18:46:19
Danke MaggieMay,

Code läuft jetzt. Ich hoffe, dass mein Problem im "Live-Test" nächste Woche auch funktioniert.

Den Hinweis mit den Code-Tags werde ich zukünftig berücksichtigen.

Gruß aus NRW
Titel: Re: Automatisierungsfehler - Ein Aufruf im Messagefilter ist unzulässig
Beitrag von: SG05 am März 29, 2016, 10:42:59
Hallo,

habe den Code nun getestet. Er läuft, wenn ich die E-Mail noch bearbeiten möchte ( .Display).

Beim sofortigem Versand ( .Send), erhalte ich eine Fehlermeldung:
"Anwendung- und objektdefinierter Fehler"

Welche Einstellung muss ich noch ändern?

Danke an alle Unterstützer.
Titel: Re: Automatisierungsfehler - Ein Aufruf im Messagefilter ist unzulässig
Beitrag von: MaggieMay am März 29, 2016, 11:18:20
Hallo,

der Fehler kommt vermutlich von Outlook, das sich nicht so ohne weiteres fernsteuern lassen will.
Eine Lösung habe ich dazu leider nicht, aber der Hinweis hilft dir evtl. bei der weiteren Recherche.
Titel: Re: Automatisierungsfehler - Ein Aufruf im Messagefilter ist unzulässig
Beitrag von: DF6GL am März 29, 2016, 15:23:35
Hallo,

Set objMailItem = objOutlook.CreateItem(olMailItem)

dürfte falsch sein.

Zudem kann  olApp.ActiveWindow  entfallen, dafür sollten dann alle erzeugten ObjekteVerweise zerstört werden:

Set objMailItem = Nothing
.
.
.
Titel: Re: Automatisierungsfehler - Ein Aufruf im Messagefilter ist unzulässig
Beitrag von: MaggieMay am März 29, 2016, 16:54:30
@Franz:
Der Fehler dürfte inzwischen bereits behoben sein - s. #3 und #4.
Titel: Re: Automatisierungsfehler - Ein Aufruf im Messagefilter ist unzulässig
Beitrag von: DF6GL am März 29, 2016, 19:27:05
Hallo,

ja, ok, hatte ich nicht (mehr) gelesen..

Das akt. Problem kommt daher, dass .Sent direkt ohne Bedienung des Outlook-Inspector-Objektes die Mail versenden will und das interpretiert Outlook als fremden "Eingriff" .  In den Outlook-Optionen/Sicherheitcenter/Programmgesteuerter Zugriff  kann das Verhalten (unter Abhängigkeit eines aktiven Virenscanners) eingestellt werden.  (Outlook als Admin ausführen erforderlich).  In einigen mir nicht bekannten Fällen klappt dies aber nicht.  (Auswahlpunkte nicht aktiv).

Insofern könnte die Mail mit dem Inspector-Objekt versendet  oder insgesamt auf das CDO-Modell ausgewichen werden

Es gab/gibt ein kleines Tool "ClickYes", das die "Bedienung" der Sicherheitsabfrage simuliert.  Ob das aber mit neueren Outlook-Version noch funktioniert, weiß ich im Moment nicht.