0

Microsoft Office Outlook 用の VBA プロジェクトがあり、NetOffice を使用して Outlook アドインとして書き直したいと考えています。

転送したいVBAコードの一部を次に示します。

Dim objNS As Outlook.NameSpace
Set objNS = Application.GetNamespace("MAPI")
Set m_colCalendarItems = objNS.GetDefaultFolder(olFolderCalendar).Items

Application実行中の Outlook アプリケーションを表します。

NetOffice のそれぞれのコードは次のようになります。

Outlook.Application objApp = Outlook.Application.GetActiveInstance();
Outlook._NameSpace objNS = (Outlook._NameSpace)objApp.GetNamespace("MAPI");
m_colCalendarItems = (Outlook.Items)objNS.GetDefaultFolder(OlDefaultFolders.olFolderCalendar).Items;

かなり多くのキャスト、確かにこれはより適切に処理できます。objAppしかし、主な問題は、最初の行 ( is null )で実行中のアプリケーションへの参照を取得できないことです。このコードはAddin_OnStartupCompleteルーチンにありますが。

これをより適切に設定する方法に関するヒントはありますか?

4

1 に答える 1

0

解決策を見つけました。私が投稿したコード スニペットは、クラス メソッドで実行されています。クラスから呼び出されますAddin_OnStartupComplete( AddinNetOffice Developer Toolbox によって自動生成されます)。実行中のアプリケーションへの参照を取得できます。これはクラスのApplicationプロパティです。Addin呼び出されたメソッドにこれを提供できます。

public class Addin : Outlook.Tools.COMAddin // this was auto-generated by the NetOffice Developer Toolbox
{
    FolderEvents m_folderevents = new FolderEvents(); // 'FolderEvents' is my class

    // additional auto-generated code removed

    private void Addin_OnStartupComplete(ref Array custom)
    {
        m_folderevents.InitFolders(this.Application);
    }
}
于 2016-12-30T16:17:09.667 に答える