2017-06-15 3 views
0

VB.net vstoアドインのSentItemsフォルダに新しいアイテムが追加されたときに発生するItemAddイベントを処理しようとしています。私はこのしようとすると:Outlook vb.net SentItemsフォルダのItemAddイベントを処理する方法

Private WithEvents mySentItems As Outlook.Items 
mySentItems = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items 

を私はちょうどそれを宣言したと思ったので、私はスーパー奇妙見つける二行目、上Declaration Expectedエラーを取得します。

私はこれを行う場合:アドインコンパイル

Private WithEvents mySentItems As Outlook.Items = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items 

をが、その後の見通しは本当に怒るとも、この例外をスローした後で追加ロードされません。

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> 
System.NullReferenceException: Object reference not set to an instance of an object. 

私はThisがすべてのクラスsubsの宣言前にThisAddinクラス宣言の直後に行うこと。

ご協力いただきありがとうございます。

答えて

0

プロパティやメソッドがnullを返すようにすべてのOutlookオブジェクトが初期化された後、あなたはコード内で次の宣言を使用することができ、(VB.NETではNothing)に見えない:

Private WithEvents mySentItems As Outlook.Items = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items 

別の態様は、複数のドットがあるということですコードの1行で使用されます。チェーンを破り、各プロパティとメソッドを1行のコードで宣言するまで、どのプロパティまたはメソッドが例外を発生させるのかを理解するのは難しいです。

また、基になるCOMオブジェクトを即座に解放することはありません。 Outlookオブジェクトの使用を終了したら、System.Runtime.InteropServices.Marshal.ReleaseComObjectを使用してOutlookオブジェクトを解放します。次に、変数をVisual BasicのNothing(C#ではnull)に設定して、オブジェクトへの参照を解放します。詳細については、Systematically Releasing Objectsの記事をご覧ください。

+0

私が欠落していた部分は、「すべてのOutlookオブジェクトが初期化された後に」ということだと思います。そのため、文をサブに移動したときに機能しました。ありがとうございました。私は正直なところ、ReleaseComObjectの部分をあまり理解していません。どのオブジェクトをリリースするべきですか? ItemsコレクションをリリースしてもSentItemイベントを捕捉できますか? – Edgar

0

サブや関数の外に割り当てを行うことはできないようです。私は行を移動しました

mySentItems = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items 

ThisAddin_Startupサブと期待どおりに動作しました。

私が最後に質問をする前に、この問題を調べてくれてありがとうございました。正直なところ私は自分の答えを投稿するためにこれをしません。

関連する問題