ahstax
Goto Top

Maitems in List(of T)

Hallo,

Ich würde gerne E-Mails, die in ein OL-Exchange-Postfach eingehen, in einer List(of T) ablegen, um sie dann später daraus zur Weiterbearbeitung zu entnehmen.
Die Variable "lstMailItemsReceivedLive" ist definiert, die Überwachung des Postfachs funktioniert:

Alt 1:
Public lstMailItemsReceivedLive As List(Of Microsoft.Office.Interop.Outlook.Items)

Alt 2:
Public lstMailItemsReceivedLive As List(Of Object)

Public Sub olInboxItems_ItemAdd(ByVal Item As Object) Handles olInboxItems.ItemAdd
   lstMailItemsReceivedLive.Add(Item)
End Sub

Ich erhalte folgende Fehlermeldungen:
Alt 1:
"Das COM-Objekt des Typs "System.__ComObject" kann nicht in den Schnittstellentyp "Microsoft.Office.Interop.Outlook.Items" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{00063041-0000-0000-C000-000000000046}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Schnittstelle nicht unterstützt (Ausnahme von HRESULT: 0x80004002 (E_NOINTERFACE))."

Alt 2:
"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

Kann mir jemand sagen, was ich wo wie zu ändern habe?

Neugierige Grüße,
Andreas

Content-Key: 223224

Url: https://administrator.de/contentid/223224

Printed on: April 16, 2024 at 19:04 o'clock

Member: colinardo
colinardo Nov 29, 2013 updated at 10:15:49 (UTC)
Goto Top
Hallo Andreas,
das sollte problemlos gehen...
Public lstMailItemsReceivedLive As new List(Of Microsoft.Office.Interop.Outlook.MailItem)
du solltest aber noch zusätzlich prüfen ob das übergebene Objekt im ItemAdd-Event tatsächlich ein MailItem ist indem du die Klasse des Objekts überpüfst.
Public Sub olInboxItems_ItemAdd(ByVal Item As Object) Handles olInboxItems.ItemAdd
  If Item.Class = Microsoft.Office.Interop.Outlook.OlObjectClass.olMail Then
     lstMailItemsReceivedLive.Add(Item)
  End if
End Sub
Wenn das obige bei dir nicht geht, dann hast du anstatt des .NET Assemblies von Outlook, die COM-Variante als Referenz eingebunden.

Grüße Uwe
Member: ahstax
ahstax Nov 29, 2013 updated at 10:57:27 (UTC)
Goto Top
Hallo Uwe,

in der Tat (Du hast ne Kristall-Kugel...?) ist die COM-Variante eingebunden...
Wo bekomme ich die .NET-Assemblies von Outlook (Office, Word...) her, wenn diese nicht in Verweise --> Hinzufügen --> .NET gelistet sind?

Könnte man das "Problem" auch irgendwie mit der COM-Variante lösen?

Grüße,
Andreas
Member: colinardo
colinardo Nov 29, 2013 updated at 11:02:54 (UTC)
Goto Top
Member: ahstax
ahstax Nov 29, 2013 at 11:23:32 (UTC)
Goto Top
Kann es sein, dass die DLLs in

Microsoft Visual Studio 2010
Version 10.0.30319.1 RTMRel
Microsoft .NET Framework
Version 4.5.50938 RTMRel

Installierte Version: VB Express

Microsoft Visual Basic 2010 01012-169-2510015-70173
Microsoft Visual Basic 2010

nicht verwendet werden dürfen bzw importiert werden können?
Member: colinardo
colinardo Nov 29, 2013 at 11:25:12 (UTC)
Goto Top
Yip, mit den Express Editionen darfst du keine Office-Anwendungen programmieren...
Member: ahstax
ahstax Nov 29, 2013 at 11:26:41 (UTC)
Goto Top
Ein Ärgernis... face-confused

Komme ich also leider nochmals zurück zu meiner Frage:
Könnte man das "Problem" auch irgendwie mit der COM-Variante lösen?
Member: colinardo
colinardo Nov 29, 2013 updated at 11:35:26 (UTC)
Goto Top
also bei mir geht's so wie ich es oben beschrieben habe auch mit der COM-Variante (getestet mit Visual Studio 2010 Professional).
Du hast die Listen nicht mit New erzeugt, deshalb bekommst du den Fehler :
"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
Und auch die Objekttypen der Liste stimmen nicht.
Member: ahstax
ahstax Nov 29, 2013 at 11:34:46 (UTC)
Goto Top
Schreibe ich dann also einfach statt

Public lstMailItemsReceivedLive As List(Of Microsoft.Office.Interop.Outlook.Items)

Public lstMailItemsReceivedLive As New List(Of Microsoft.Office.Interop.Outlook.Items)
Member: colinardo
colinardo Nov 29, 2013 updated at 12:24:25 (UTC)
Goto Top
lese doch mal bitte meinen ersten Post richtig:
Public lstMailItemsReceivedLive As new List(Of Microsoft.Office.Interop.Outlook.MailItem)
Das Objekt in der Liste ist immer als Objekt-Typ in der Einzahl zu sehen nicht in der Mehrzahl. Du übergibst ja nicht eine ganze Liste an Mails an die Liste, sondern nur eine Mail auf einmal.
Member: ahstax
ahstax Nov 29, 2013 at 11:40:27 (UTC)
Goto Top
Verzeihung bitte, ich hatte das "Mail"-Item und "New" beim Lesen übersehen.

So funktioniert es!

Danke für Deine Hilfe!