Outlook 2013 Kalendereintrag per Regel akzeptieren und löschen

Mitglied: speedy132

speedy132 (Level 1) - Jetzt verbinden

24.04.2017, aktualisiert 14:29 Uhr, 1454 Aufrufe, 27 Kommentare

Hallo,
ich möchte das bestimmte Kalendereinträge automatisiert z. B. durch eine Regel akzeptiert werden.

Zur Erklärung:
Wir haben folgendes Szenario.
Einzelne Mitarbeiter übernehmen für bestimmte Kunden den Support. Das wird in ein Excel File eingetragen und in SAP verarbeitet.
Soweit so gut....
Jetzt hat ein Mitarbeiter aber z.B. 10 Kunden für die er Support übernimmt und bekommt dann von SAP eine automatisch generierte Email zugeschickt (Die Order Nummer ist im Betreff enthalten), wo
der entsprechende Zeitraum für den Kalender aufgeführt ist.
Pro Kunde eine Mail. Jetzt hast du wie gesagt 10 Kunden und bekommst dann 10 Kalendereinträge per Mail zugeschickt und musst diese dann entsprechend öffnen und speichern, damit der Eintrag im Kalender übernommen wird. Das ganze aber auch, wenn sich kurzfristig etwas ändert oder der Eintrag gelöscht wird, da ich z.B. den Support abgebeben habe.

Sehr lästig und nervig.
Meine Überlegung ist, eine Regel zu erstellen, die automatisch den Kalendereintrag akzeptiert und die Mail dann löscht.
Bei Absage bzw. Austrag aus dem Kalender dasselbe. Eine Regel die automatisch den Kalendereintrag löscht.

Dazu habe ich in den Regeln aber keinen Eintrag gefunden.
Kann ich so eine Regel selbst erstellen (evtl. vba)?

Über jeden Hinweis etc. bin ich dankbar.

Schon mal herzlichen Dank

Gruß
Marcus
27 Antworten
Mitglied: 132895
132895 (Level 2)
24.04.2017, aktualisiert um 17:25 Uhr
Kann ich so eine Regel selbst erstellen (evtl. vba)?
AppointmentItem.Respond Method (Outlook)
oder
Ressourcen-Postfach am Exchange mit Buchungsautomatik erstellen?

Gruß
Bitte warten ..
Mitglied: speedy132
25.04.2017 um 08:58 Uhr
Hallo elchapo,

kann nur clientseitig arbeiten, habe zum Server keinen Zugriff.

Die Methode habe ich so übernommen und funktioniert echt super. Genau den Effekt den ich mir vorgestellt habe.
Allerdings werden jetzt alle Terminanfragen sofort eingetragen.
Jetzt müsste im Code noch eine Untersuchung der Betreffzeile stattfinden. Und nur wenn da eine bestimmte Nummer drin steht, dann soll das so gemacht werden.

Das ist die Methode:

Sub AcceptMeeting()
Dim myNameSpace As Outlook.NameSpace
Dim myFolder As Outlook.Folder
Dim myMtgReq As Outlook.MeetingItem
Dim myAppt As Outlook.AppointmentItem
Dim myMtg As Outlook.MeetingItem

Set myNameSpace = Application.GetNamespace("MAPI")
Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
Set myMtgReq = myFolder.Items.Find("[MessageClass] = 'IPM.Schedule.Meeting.Request'")
If TypeName(myMtgReq) <> "Nothing" Then
Set myAppt = myMtgReq.GetAssociatedAppointment(True)
Set myMtg = myAppt.Respond(olResponseAccepted, True)
myMtg.Send
End If
End Sub

Meine Kenntnisse sind aber nicht so tiefgreifend, um das jetzt hier einbauen zu können.

Gruß
Marcus
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
25.04.2017, aktualisiert um 09:28 Uhr
Mach einfach eine For-Each-Schleife über das Ergebnis des Finds und prüfe dann per IF-Abfrage die Eigenschaft Subject ;-) face-wink.
Bitte warten ..
Mitglied: speedy132
25.04.2017 um 10:15 Uhr
Komme hier nicht weiter ...

If TypeName(myMtgReq) <> "Nothing" Then
For Each myMtgReq in ?????
If myMtgReq.Subject = "test" Then
Set myAppt = myMtgReq.GetAssociatedAppointment(True)
Set myMtg = myAppt.Respond(olResponseAccepted, True)
myMtg.Send
End If
Next
End If
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
25.04.2017, aktualisiert um 10:20 Uhr
Bitte warten ..
Mitglied: speedy132
25.04.2017 um 10:50 Uhr
Ich verzweifle fast. Ich tue mich so schwer damit...

So habe ich das jetzt und es funktioniert nicht.

For Each m In myMtgReq
If m.Subject = "test" Then
Set myAppt = myMtgReq.GetAssociatedAppointment(True)
Set myMtg = myAppt.Respond(olResponseAccepted, True)
myMtg.Send
End If
Next

-> Objekt unterstützt diese Methode ... nicht...

Was mach ich denn noch falsch?
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
25.04.2017, aktualisiert um 10:54 Uhr
Du hast das m nicht in den anderen Zeilen innerhalb der For-Schleife ersetzt ;-) face-wink. Denn in myMtgReq sind mehrere Items die du mit der Schleife durchläufst und dann innerhalb der Schleife "einzeln" mit dem m ansprichst.

Ab und zu sollte man auch Dokus lesen :-( face-sad Das sind einfachste Grundlagen die du überall nachlesen kannst.
Wenn du das nicht willst, fang gar nicht erst das Programmieren an!!
Bitte warten ..
Mitglied: speedy132
25.04.2017 um 10:58 Uhr
For Each m In myMtgReq
If m.Subject = "test" Then
Set myAppt = m.GetAssociatedAppointment(True)
Set myMtg = myAppt.Respond(olResponseAccepted, True)
myMtg.Send
End If
Next

Aber der Anfang der Schleife ist glaube ich schon fehlerhaft. Muss das m nicht noch deklariert werden?
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
25.04.2017, aktualisiert um 11:25 Uhr
Aber der Anfang der Schleife ist glaube ich schon fehlerhaft. Muss das m nicht noch deklariert werden?
Musst du nicht wenn du nicht Option Explicit am Anfang des Codes stehen hast ;-) face-wink. Du darfst jetzt natürlich nicht das mymtgReq als Meeting deklarieren weil das Ergebnis mehrere Items sind !!!
Bitte warten ..
Mitglied: speedy132
25.04.2017 um 12:14 Uhr
ja, ich habe ja gesagt ich bin nicht so gut ...
Allerdings weiß ich auch nicht, wo ich so etwas spezielles in kürzester Zeit nachlesen soll.

Als was muss ich denn dann mymtgReq deklarieren?
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
25.04.2017, aktualisiert um 12:19 Uhr
Zitat von @speedy132:
Allerdings weiß ich auch nicht, wo ich so etwas spezielles in kürzester Zeit nachlesen soll.
In den Grundlagen zu VBA steht's.
Als was muss ich denn dann mymtgReq deklarieren?
Steht oben.
Bitte warten ..
Mitglied: speedy132
27.04.2017 um 10:31 Uhr
So, ich habe jetzt ein wenig getestet und probiert und folgendes Ergebnis erzielt:

Sub AcceptMeeting()
Dim myNameSpace As Outlook.NameSpace
Dim myFolder As Outlook.Folder
Dim myAppt As Outlook.AppointmentItem
Dim myMtg As Outlook.MeetingItem
Dim myMail As Outlook.MailItem

Set myNameSpace = Application.GetNamespace("MAPI")
Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
Set myMtgReq = myFolder.Items

If TypeName(myMtgReq) <> "Nothing" Then
For Each m In myMtgReq
'If m.UnRead = True Then
'Neuer Termin
If m.Subject = "I-55023414-:0" Or m.Subject = "I-55023399-:0" Then
Set myAppt = m.GetAssociatedAppointment(True)
Set myMtg = myAppt.Respond(olResponseAccepted, True)
myMtg.Send
m.UnRead = False
m.Delete
End If
'Für Terminänderungen -> Änderungen U-55… statt I-55… und man muss nicht erneut auf Zusagen klicken
If m.Subject = "U-55023414-:0" Or m.Subject = "U-55023399-:0" Then
Set myAppt = m.GetAssociatedAppointment(True)
Set myMtg = myAppt.Respond(olResponseAccepted, True)
'myMtg.Send
m.UnRead = False
m.Delete
End If
'End If
Next
End If
End Sub

Funktioniert soweit, allerdings sobald eine Mail mit Termin gefunden wird, wird die Schleife beendet, obwohl noch weitere Termine da sind.
Was kann man da noch verändern?

Gruß
Marcus
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
27.04.2017, aktualisiert um 10:38 Uhr
Logisch, weil du mit
m.Delete
die Items-Collection in der Schleife veränderst, also Items raus löschst, deswegen werden Elemente übersprungen.
Speichere die Elemente die gelöscht werden sollen in einer weiteren Collection zwischen und lösche die Elemente der Collection am Ende der Sub. Fertig.

p.s. Schon mal was von Codetags hier im Forum gehört?
</> links in deiner Symbolleiste!!
Bitte warten ..
Mitglied: speedy132
27.04.2017 um 11:31 Uhr
Ja das hört sich gut an...
Jetzt die Frage, wie muss ich das machen?

Habe jetzt folgendes probiert:
Dim myItem As Outlook.MailItem

Im if-Block dann
Set myItem = m.Items.Add
Aber funktioniert nicht...

???
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
27.04.2017 um 11:36 Uhr
Bitte warten ..
Mitglied: speedy132
27.04.2017 um 13:20 Uhr
Danke, sehr interessant.

Allerdings habe ich jetzt das Problem, wie kann ich die Mails löschen, nicht nur die Collection leeren.

Im If Block
myCol.Add m

Am Ende dann
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
27.04.2017 um 13:40 Uhr
Na die Delete-Methode des Items aufrufen, es ist ja immer noch ein AppointmentItem.
Bitte warten ..
Mitglied: speedy132
27.04.2017 um 14:17 Uhr
Ja super, damit kann ich diesen Thread als gelöst erklären.
Hier nun meine Implementierung:
Herzlichen Dank an password für die Hilfestellung :-) face-smile
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
27.04.2017, aktualisiert um 14:23 Uhr
Find ich super das es hier auch User wie dich gibt denen man nicht alles vorbeten muss sondern die sich minimal mit der Materie auseinandersetzen mit den Infos die man Ihnen gibt! Daumen hoch!
Bitte warten ..
Mitglied: speedy132
27.04.2017 um 14:51 Uhr
Ja, das hat mich aber auch Nerven und Zeit gekostet. Aber das Ergebnis ist prima.
Hat aber auch Spaß gemacht. Wahnsinn was man alles so mit so ein paar Codezeilen erreichen kann.

Danke und Gruß
Marcus
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
27.04.2017, aktualisiert um 15:05 Uhr
Zitat von @speedy132:
Ja, das hat mich aber auch Nerven und Zeit gekostet. Aber das Ergebnis ist prima.
Und du hast vor allem auch was gelernt.
Hat aber auch Spaß gemacht. Wahnsinn was man alles so mit so ein paar Codezeilen erreichen kann.
Schön zu hören, so solls sein.
Danke und Gruß
Gerne, und weiterhin erfolgreiches Coding.
Bitte warten ..
Mitglied: speedy132
28.04.2017 um 08:37 Uhr
Eine Frage habe ich noch.
Ich habe jetzt diesen Code in ThisOutlookSession eingebunden und man kann ihn über "Makro" dann ausführen.
Wenn ich den jetzt automatisiert ablaufen lassen möchte, sobald eine neue Mail eintrifft, wie muss ich da vor gehen?

Gruß
Marcus
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
28.04.2017, aktualisiert um 09:36 Uhr
Du nimmst das NewMailEx Event dazu in ThisOutlookSession:
Da mehrere Mails auf einmal eintreffen können enthält die Event-Variable "EntryIDCollection" mehrere uniqueIDs der Mails welche mit einer For-Schleife nacheinander verarbeitet werden. objItem enthält dann in der Schleife jeweils das Mail-Objekt mit dem du arbeiten kannst.
Bitte warten ..
Mitglied: speedy132
28.04.2017, aktualisiert um 11:23 Uhr
OK, habe den kompletten Code in die NewMailEx Sub unterhalb der For Schleife eingebunden. Erstmal ohne mit objItem zu arbeiten.

wo kann ich denn jetzt mit objItem weiter arbeiten?
Eigentlich läuft es jetzt, allerdings habe ich noch nicht alles testen können. Was funktioniert denn nicht?
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
28.04.2017 um 11:37 Uhr
Du hast das Prinzip von Schleifen anscheinend noch nicht ganz Verstanden.
Statt hier myMtgReq und eine zusätzliche Schleife zu verwenden nutzt du hier objItem da dies das gerade eingetroffene Objekt (also die Mail) beinhaltet! Du brauchst also in diesem Fall keine zusätzliche Schleife in der Schleife mehr weil du das einzelne Objekt direkt bearbeitest und nicht mehr alle Items des Ordners durchlaufen musst!
Bitte warten ..
Mitglied: speedy132
28.04.2017 um 14:57 Uhr
ja, da hast du Recht. Programmieren ist nicht meine Stärke.
Wie kann ich objItem mit mymtgReq austauschen? Das verstehe ich nicht, da die Eigenschaften oder Methoden von mymtgReq doch dann gar nicht zur Verfügung stehen. Aber da zeigt sich bestimmt wieder meine Unwissenheit :-( face-sad

Danke
Bitte warten ..
Mitglied: 132895
132895 (Level 2)
LÖSUNG 28.04.2017, aktualisiert um 15:33 Uhr
Zitat von @speedy132:
Wie kann ich objItem mit mymtgReq austauschen? Das verstehe ich nicht, da die Eigenschaften oder Methoden von mymtgReq doch dann gar nicht zur Verfügung stehen.
Doch, du siehst sie nur nicht in der Intellisense weil es ein "Object" ist. Verfügbar sind sie trotzdem.
Aber da zeigt sich bestimmt wieder meine Unwissenheit :-( face-sad
Jepp.

Bitte warten ..
Heiß diskutierte Inhalte
Router & Routing
Erklärung zu diesen Geräten
RoadmaxVor 1 TagFrageRouter & Routing7 Kommentare

Hallo Zusammen, bei uns war heute spontan das Internet weg und wir mussten die Carrier Geräte neu starten. Mir stellt sich die Frage, welches ...

Viren und Trojaner
Emotet angeblich unschädlich gemacht
DoskiasVor 13 StundenInformationViren und Trojaner14 Kommentare

Hallo zusammen, kam grade rein. Wir werden sehen ob es stimmt: Eilmeldung Bundeskriminalamt: Weltweit gefährlichste Schadsoftware unschädlich gemacht Stand: 27.01.2021 13:18 Uhr Deutsche Ermittler ...

Erkennung und -Abwehr
GDATA oder Defender in MS W10-Umgebung?
winackerVor 1 TagFrageErkennung und -Abwehr7 Kommentare

Hallo, seit Jahren habe ich eine Firmenlizenz des GDATA-AV. Die ist nun wieder zur Verlängerung fällig und ich frage mich ob das noch Sinn ...

Firewall
PfSense als Exposed Host hinter FritzBox 6591 Cable
SMT000Vor 1 TagFrageFirewall6 Kommentare

Hallo zusammen, ich kenne mich mit dem Thema leider nicht gut aus und habe deshalb einige Verständnisfragen. Vorab, ich hab hier eine FritzBox 6591 ...

Windows Update
Clients melden sich nicht selbständig am WSUS Server
BPeterVor 1 TagFrageWindows Update11 Kommentare

Hallo, ich habe einen Windows Server 2019 WSUS in unserem AD eingerichtet. Die Clientkonfig übertrage ich per Group Policy. Sie wird auch vom Client ...

Windows Server
Server "Soft-RAID"
EckiD1Vor 1 TagFrageWindows Server7 Kommentare

Hi, ich habe an einem Hyper-V Host (WS 2019 Standard) mehrer NVMe am HBA die ich zu einem RAID verbinden möchte. Nur für das ...

Exchange Server
5.4.1 Recipient address rejected: Access denied. AS(201806281)
gelöst DeclarationVor 1 TagFrageExchange Server5 Kommentare

Hallo im Unternehmen ist Microsoft 365 business installiert inclusice AD Syncronisierung bei 10 MA . Bis Samstag lief der Exchange perfekt. Seitdem bekommt ein ...

Windows Server
Benutzer und Postfach über AD erstellen
Igdirli76Vor 1 TagFrageWindows Server10 Kommentare

Hallo Leute, bitte erschießt mich nicht gleich wegen meiner frage. Ich habe einen Windows Server 2019 Datacenter installiert und wollte beim User erstellen, dass ...