Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Code crasht bei Maileingang in 2. Postfach & Kalenderanfragen
#1
Liebes Forum,

ich habe ein Makro laufen, das eingehende Mails in meinem Hauptkonto auf ein Kriterium analysieren soll und dann eine entsprechende Antwortmail auslöst. Das funktioniert einwandfrei!

Dieses Makro crasht allerdings jedes mal mit "Laufzeitfehler 13: Typen unverträglich" sobald ich eine Mail im 2. verknüpften Outlook-Postfach erhalte oder eine Kalenderanfrage im Hauptpostfach.

Beim Debuggen wird folgende Zeile gelb markiert:
Code:
Set IBx = NSp.GetDefaultFolder(olFolderInbox)

Ich hätte gerne, dass nur Mails im Hauptpostfach überprüft werden bzw. dass die Kalenderanfragen und Mails in anderen Outlook-Postfächern ignoriert werden - ohne Fehlermeldung.

Anbei mal der Code bis zur Prüfung des Betreffs:
Code:
Sub sb_Neue_Buchung()

Dim Buch As Buchung
Dim EML As MailItem, IBx As Folder
Dim Webinare As Folder
Dim objOutlook As Object
Dim objMail As Object

    Set objOutlook = CreateObject("Outlook.Application")
    Set objMail = objOutlook.CreateItem(0)
    Set NSp = Application.GetNamespace("MAPI")
    Set IBx = NSp.GetDefaultFolder(olFolderInbox)
    Set Webinare = NSp.Folders.Item(myML).Folders("Posteingang").Folders("Webinare")
    Set EML = IBx.Items.GetLast
   
        If EML.Class = olMail Then
        'Prüfe auf Bedingung die die Mail erfüllen muss, um eine Antwort auszulösen.....

Vielleicht reicht ja eine kleine Ergänzung oder es gibt einen einfach workaround :)

Unter die Dim...."On Error Resume Next" zu ergänzen, löst einfach immer meine Antwortmail aus, auch wenn die Bedingung nicht erfüllt ist - war also nicht die Lösung.

Ich habe unter folgendem Link ein Problem mit mehreren Postfächern gefunden, es ist etwas anders gelagert. Leider habe ich nicht verstanden, wie ich die Lösung dort eventuell sauber übernehmen/anpassen kann?!
https://www.herber.de/forum/archiv/1296t...ehlen.html
Falls unerwünscht einfach wieder rausschmeissen!

Liebe Grüße,
Phiant
Antworten Top
#2
Hallo!

Arbeite mit "Session.Folders".

  Dim olapp        As Object
  Dim olName       As Object
  Dim olHFolder    As Object
  Dim olUFolder    As Object

  Set olapp = CreateObject("Outlook.Application")
  Set olName = olapp.GetNamespace("MAPI")
  Set olHFolder = olName.Session.Folders("Kontoname") ' Kontoname 
  Set olUFolder = olHFolder.Folders("Posteingang") 'Ordnername 


VBA/HTML-CodeConverter, AddIn für Excel 2002-2019 (32-bit) und Excel 365 (32-bit Desktop-Version)
In VBA geschrieben von Lukas Mosimann. Projektbetreuung: René Holtz


Code erstellt und getestet in Excel 365 32-bit Desktopversion
Codedarstellung mit VBAHTML 12.6.0 erstellt.


Gruß, René
[-] Folgende(r) 1 Nutzer sagt Danke an mumpel für diesen Beitrag:
  • Phiant
Antworten Top
#3
Hallo René!

Die gute Nachricht zuerst :) Deinen Code habe ich integriert und es funktioniert im Hauptpostfach immer noch wie es soll!
Die schlechte Nachricht: Bekomme ich eine Mail ins andere Postfach wird jetzt folgende Zeile vom Debugger hervorgehoben:
Code:
If EML.Class = olMail Then
EML.Class = Objektvariable oder With-Blockvariable nicht festgelegt

Der Code schaut jetzt wie folgt aus:
Code:
Sub sb_Neue_Buchung()

Dim Buch        As Buchung
Dim EML         As MailItem
Dim Webinare    As Folder
Dim olapp       As Object
Dim olName      As Object
Dim olHFolder   As Object
Dim olUFolder   As Object
Dim objMail     As Object

    Set olapp = CreateObject("Outlook.Application")
    Set objMail = olapp.CreateItem(0)
    Set olName = olapp.GetNamespace("MAPI")
    Set olHFolder = olName.Session.Folders(myML) ' Kontoname
    Set olUFolder = olHFolder.Folders("Posteingang") 'Ordnername
    Set Webinare = olUFolder.Folders("Webinare")
    Set EML = olUFolder.Items.GetLast
   
        If EML.Class = olMail Then
            If InStr(1, EML.Subject, "neue Buchung", vbBinaryCompare) > 0 Then
                Ar = Split(EML.Body, vbLf)
                Debug.Print UBound(Ar)

Fehlt mir hier einfach nochmal eine Abstufung in den Variablen? 

Danke nochmal für den schnellen Input!

EDIT: Der Code funktioniert, solange noch eine Mail im Hauptkonto-Posteingang liegt. Den habe ich allerdings leer sobald alles abgearbeitet ist und solange er leer ist kommt obige Fehlerbeschreibung.
Sobald ich im Hauptkonto-Posteingang einen Outlook-Termin bekomme, wird folgende Zeile markiert und der Fehler "Typen unverträglich" produziert:
Code:
Set EML = olUFolder.Items.GetLast
Mit welcher if-Bedingung oder Schleife kann ich dieses Problem umgehen?!?

Liebe Grüße,
Phiant
Antworten Top
#4
Ich habe eine Lösung gefunden!

Code:
Sub sb_Neue_Buchung()

Dim Buch        As Buchung
Dim EML         As Object 'anstatt wie vorher als MailItem
Dim Webinare    As Folder
Dim olapp       As Object
Dim olName      As Object
Dim olHFolder   As Object
Dim olUFolder   As Object
Dim objMail     As Object

    Set olapp = CreateObject("Outlook.Application")
    Set objMail = olapp.CreateItem(0)
    Set olName = olapp.GetNamespace("MAPI")
    Set olHFolder = olName.Session.Folders(myML) ' Kontoname
    Set olUFolder = olHFolder.Folders("Posteingang") 'Ordnername
    Set Webinare = olUFolder.Folders("Webinare")
    Set EML = olUFolder.Items.GetLast
   
    If Not EML Is Nothing Then 'wenn der Haupt-Posteingang leer ist und eine Mail ankommt war EML "Nothing"
        If EML.Class = olMail Then 'jetzt kann geprüft werden, ob es eine Mail oder ein Termin, etc. ist
            If InStr(1, EML.Subject, "neue Buchung", vbBinaryCompare) > 0 Then 'hier beginnt die eigentliche Prüfung der Mail

Wieder mal vielen Dank für die Anregung, vielleicht hilft es nochmal jemand anderem :)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste