Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Automatisierungsfehler - Ein Aufruf im Messagefilter ist unzulässig

Begonnen von SG05, März 22, 2016, 18:50:04

⏪ vorheriges - nächstes ⏩

SG05

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.

DF6GL

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)
.
.
.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

SG05

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



MaggieMay

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!
Freundliche Grüße
MaggieMay

SG05

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

SG05

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.

MaggieMay

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.
Freundliche Grüße
MaggieMay

DF6GL

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
.
.
.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MaggieMay

@Franz:
Der Fehler dürfte inzwischen bereits behoben sein - s. #3 und #4.
Freundliche Grüße
MaggieMay

DF6GL

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.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access