@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Outlookのメールアイテムにメニューを追加する方法

1
投稿者投稿内容
みや
会議室デビュー日: 2008/03/03
投稿数: 2
投稿日時: 2008-03-03 22:58
お世話になっております。
以下の環境にてOutlookのCOMアドインの開発を行っています。
Windows XP Pro P2
VS 2003
VB.NET
Office 2003

Outlook起動時にメールアイテムにメニューを追加する処理を行っているのですが
以下のエラーが発生し正常に動作しません。
「オブジェクト参照がオブジェクトインスタンスに設定されていません。」
インスタンスを設定する必要があるのですが、
Dim obrMenus As _CommandBars = New CommandBars() などど宣言すると以下のエラーが発生しコンパイルできません。
「Microsoft.Office.Core.CommandBarsClass Private Sub New() はコンテキストであるため'Private'ではアクセスできません」

どのようにインスタンスを設定すれば正常に動作するのでしょうか?
いろいろ調べたのですが解決策が見つかりません。
よろしくお願いいたします。以下ソースになります。

------------------------------------------------------------------------------
Imports Microsoft.Office.Core
imports Extensibility
Imports System.Runtime.InteropServices
Imports Outlook = Microsoft.Office.Interop.Outlook

'******************* 省略 *********************************************

Public Class Connect

Implements Extensibility.IDTExtensibility2
Public g_objAppInstance As New Outlook.Application
Dim applicationObject As Object
dim addInInstance as object

'******************* 省略 *********************************************

Public Sub OnConnection(ByVal application As Object,
ByVal connectMode As Extensibility.ext_ConnectMode,
ByVal addInInst As Object, ByRef custom As System.Array)
Implements Extensibility.IDTExtensibility2.OnConnection
applicationObject = application
addInInstance = addInInst

Dim oMailItem As Outlook.MailItem
Dim oInspector As Outlook.Inspector
Dim obrMenus As _CommandBars
Dim cbrMenu As CommandBar
Dim ctlBtnAddIn As CommandBarButton

g_objAppInstance = application
Try
oMailItem = g_objAppInstance.CreateItem(Outlook.OlItemType.olMailItem)
'メニュー作成
oInspector = oMailItem.GetInspector
obrMenus = oInspector.CommandBars
cbrMenu = obrMenus.Item("Tools") ←ここで「オブジェクト参照がオブジェクトインスタンスに設定されていません。」のエラーが発生

ctlBtnAddIn = cbrMenu.FindControl(Tag:="AddrBook-Form-M")
If ctlBtnAddIn Is Nothing Then
ctlBtnAddIn = cbrMenu.FindControls.Add(Type:=MsoControlType.msoControlButton, Parameter:="AddrBook-Form-M")
With ctlBtnAddIn
.Caption = "テストメニュー"
.Tag = "AddrBook-Form-M"
.Style = MsoButtonStyle.msoButtonCaption
.OnAction = "!<" & addInInstance.ProgId & ">"
End With
End If

Catch ex As Exception
MsgBox(ex.Message)
Finally
oMailItem.Close(Outlook.OlInspectorClose.olDiscard)
End Try

End Sub

End Class
-------------------------------------------------------------------------------


じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-03-04 10:01
引用:

みやさんの書き込み (2008-03-03 22:58) より:

obrMenus = oInspector.CommandBars
cbrMenu = obrMenus.Item("Tools")


自信があるわけではありませんが。 こういったものは CommandBars に Create メソッドや Add メソッドなどがあり、追加しがてら取得できるようなモデルが多いです。 VSTO でもそうなっています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)