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.
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)
.
.
.
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
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!
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
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.
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.
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
.
.
.
@Franz:
Der Fehler dürfte inzwischen bereits behoben sein - s. #3 und #4.
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.