Neuigkeiten:

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

Mobiles Hauptmenü

Fehler beim Zugriff auf Outlook - Öffentliche Ordner

Begonnen von nimora, August 06, 2015, 18:40:17

⏪ vorheriges - nächstes ⏩

nimora

Tach,

ich habe mich nun mit dem Zugriff auf die Ordnerstruktur von Outlook befasst. Funzt auch. Nun scheinen mache Mails, die ich da importieren möchte aber merkwürdige Inhalte zu haben, sodass es zu folgendem Fehler kommt:
Laufzeitfehler '438' Objekt unterstützt diese Eigenschaft oder Methode nicht. Die Meldung kommt aber nicht gleich, vorher sind bereits mehrere hundert mails durchlaufen worden und der gewünschte output erzeugt. Nur an bestimmten stellen scheint was faul zu sein.

Habt ihr eine Idee, warum der Fehler auftritt und wie man das abfedern kann?

Private Sub Befehl17_Click()
' ##################### OutlookImport ##################################
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim outObject, Mapi, Inbox1, Mail, Inbox2, Inbox3
Dim strSQL As String

Set rs = CurrentDb.OpenRecordset("OutlookImport")
Set outObject = CreateObject("Outlook.Application")
Set Mapi = outObject.GetNamespace("MAPI")

Set Inbox1 = Mapi.Folders("Öffentliche Ordner")
Set Inbox2 = Inbox1.Folders("Alle Öffentlichen Ordner")
Set Inbox3 = Inbox2.Folders("tt")

For Each Mail In Inbox2.Items
    Debug.Print Mail.SenderEmailAddress
Next

End Sub


Danke

MaggieMay

Hi,

zunächst einmal setze den Haken bei der VBA-Option "Variablendeklaration erforderlich" und füge die Zeile "Option Explicit" im Kopf eines jeden Moduls ein, da wo es fehlt. Dann kompiliere den Code und bereinige die Fehler.

Wenn besagter Laufzeitfehler auftritt, kannst du in den Unterbrechungsmodus gehen und dir im Lokalfenster den aktuellen Stand der Objekte und deren Eigenschaften anschauen. Vielleicht bringt das neue Erkenntnisse.
Freundliche Grüße
MaggieMay

nimora

Danke danke :)

Variablendeklaration und Option explicit habe ich bereits eingefügt/aktiviert, aber was ist mit kompilieren gemeint und wie aktiviere ich denunterbrechungsmodus?

MaggieMay

Das Kompilieren wird über den Menü-Befehl "Debuggen" aus dem VBA-Editor heraus angestoßen.

In den Unterbrechungsmodus kommst du, wenn du bei Auftreten der Fehlermeldung auf "Debuggen" gehst.
Freundliche Grüße
MaggieMay

nimora

#4
Danke für die Antwort.

leider passiert da beim "kompilieren" nix, ob ich nun F8 oder Shift F8 drücke :(

wenn ich das ganze starte, kommt nach etwa zwei bis 3 minuten der fehler. bis dahin funktioniert das debug.print aber gut.

wenn ich dann auf "Debuggen" klicke, springt er in "debug.print Mail.SenderEmailAdresse"

Das hilft mir irgendwie nicht, oder? ich denke, dass er sich an einer dieser Mailadressen stört. manchmal ist es ja spam mit recht merkwürdigen mail-adressen. aber eigentlich soll er ja nur den string ausgeben. ist für mich daher unverständlich, warum da ein fehler entsteht.

habt ihr noch ideen? bzw. was mache ich beim kompilieren über Debuggen für F8/Shift F8 falsch?

nachdem "debug.print Mail.SenderEmailAdresse" gelb markiert wurde, habe ich F8 gedrückt, dann kommt aber wieder die ursprüngliche Fehlermeldung.

Edit:
ich habe das ganze eben auch mal mit "debug.print Mail.SentOn" getestet. auch da tritt es auf. Es scheint also nicht, wie gedacht, explizit an einer Mailadresse zu liegen, sondern an einer Mail selbst. Gibt es bei diesem Vorgang einen maximale Anzahl von durchläufen, sodass es vielleicht an der Menge der Mails scheitert? Wohl eher nicht, oder?

MaggieMay

Hi,

Kompilieren solltest du nach Hinzufügen von Option Explicit, das hat nichts mit F8 zu tun.
ZitatDas hilft mir irgendwie nicht, oder?
Doch sicher, dann kannst du dir die aktuelle Position und die Inhalte anschauen.
Freundliche Grüße
MaggieMay

nimora

dann habe ich das noch nicht verstanden.

vor Privat Sub steht folgendes:

Option Compare Database
Option Explicit

aber wie starte oder aktiviere ich denn das Kompilieren nun? Du hast gesagt über das Menü Debuggen, aber was dort? Mit F8 hat das nichts zu tun, sagst du.

und es passiert eben nix. wenn ich das, wie gedacht über den Button im Formular starte, läuft es einfach durch, bis der fehler auftritt. mehr wird mir dann nicht angezeigt. bin verwirrt.

MaggieMay

#7
Wenn du im VBA-Editor auf Debuggen klickst, steht direkt darunter "Kompilieren von...".
Mein Hinweis auf das Kompilieren bezieht sich darauf, dass du in der hier gezeigten Prozedur eine nicht deklarierte Variable verwendest. Aber das nur nebenbei.

Das Debuggen selbst nimmst du vor, wenn du dich im Unterbrechungsmodus des laufenden Codes befindest. Dort kannst du dann im Lokalfenster den Stand der Objekte und deren Eigenschaften einsehen und deine Schlüsse daraus ziehen.
Das heißt, du musst selbst aktiv werden, die Informationen werden dir nicht automatisch präsentiert.

PS:
Worauf es hinausläuft ist folgendes: Wenn du die Email identifiziert hast, die den Fehler verursacht, so kannst du vielleicht ein entscheidendes Merkmal finden, das dir hilft den Fehler abzufangen.
Freundliche Grüße
MaggieMay

nimora

Das Kompilieren von... ist ausgegraut.

mit nicht deklarierten Variable meinst du Inbox3? das ist nur beim copy past verloren gegangen, die ist schon vorhanden.

Ich muss leider noch fragen, wo oder was das Lokalfenster sein soll? Sehe ich das erst, wenn es möglich ist, auf "Kompilieren von" zu klicken und warum ist das augegraut?

MaggieMay

Wenn der Menüpunkt ausgegraut ist, dann ist die DB kompiliert. Das Thema Kompilieren ist damit erledigt, nun geht es ums Debuggen. Wenn der Fehler auftritt und du im Unterbrechungsmodus bist, kannst du über Menü "Ansicht" das Lokalfenster einblenden und dir die Details des "Mail"-Objekts anschauen. Finde heraus was an dieser Mail Besonderes ist, dass sie keine "SenderEmailAddress"-Eigenschaft hat.
Freundliche Grüße
MaggieMay

nimora

okay. Danke für die Ausführungen, das hat so geklappt.

Aber da steht jede Menge drin. und jedes Element kann man ausklappen:
me
rs
outObject
Mapi
Mail
Inbox1-3

Wo fängt man denn da an und wonach muss man suchen? Wenn man das aufklappt, sind noch weitere unterebenen.

Ein Pfad lautet z.b. Application/Application und darin ist jeweils ein unterpunk "AnswerWizard" und bei Wert steht <Fehler beim Ausführen der Operation>

aber es gibt noch jede Menge weiterte unterbereiche.

aber das meint ihr, oder?

MaggieMay

Zitatund jedes Element kann man ausklappen
Ich schrieb ja schon, dass du dir das Mail-Objekt vornehmen solltest. Finde als erstes heraus um welche Mail es geht, dann schau dir ihre Eigenschaften an.
Freundliche Grüße
MaggieMay

nimora

danke, aber auch das mail-objekt ist einigermaßen voll - siehe anhang.

gehe ich richtig in der Annahme, dass conversationTopic sows wie betreff ist?
aber aus den ganzen anzeigen werde ich als anfänger nicht schlau. ich weiß doch nicht mal, wo ich anfangen soll und welche Eigenschaften gemeint sind, was eine eigenschaft definiert usw. :/

ich habe unten noch ein Subject gefunden, da ist eine Raute (#) drin. kann sowas störend sein und einen fehler auslösen?

markusxy

#13
Hallo nimora,
Grundsätzlich zu deinem Problem:
In einem Ordner können sich verschiedene Objekte befinden.
Bevor du eine Eigenschaft eines Items abfragst, musst Du sicher gehen, ob es sich überhaupt um ein Mailitem handelt. Entweder über Typename, oder bei den Items über die Class Eigenschaft.

z.B.
If item.Class = olMail

Diese Deklaration:
Dim outObject, Mapi, Inbox1, Mail, Inbox2, Inbox3

würde ich nur sehr sparsam einsetzen. Datentyp Variant kann ja bekanntlich alles aufnehmen.
Wenn verschiedene Objekte in einer Auflistung sind, muss man natürlich einen Variablen Typen einsetzen.

dim Item as Object, Mail as Mailitem

for each Item in Folder
      if Item.Class = olmail then
            set Mail = item

jetzt kannst du auf die Auflistung aller Eigenschaften und Methoden in Mail zugreifen und bekommst in der Folge einen fehlerfreien Code
LG Markus

MaggieMay

#14
Hi,

wie mal an dem Screenshot sieht, handelt es sich ja um eine Email, das kann es also nicht sein. Um mehr zu sagen, müsste man auch den unteren Teil der Auflistung noch sehen zu können, evtl. muss man aber auch noch tiefere Ebenen aufblättern. Folge doch einfach mal deiner Intuition und finde ein Kriterium, anhand dessen du diese Mail von anderen unterscheiden und von der Verarbeitung ausschließen kannst.

Alternativ könntest du den Fehler mit einer Error-Routine abfangen und mit der nächsten Mail weitermachen.
Freundliche Grüße
MaggieMay