VB2003で開発しております。
Excelを参照設定せつずにExcelのイベントを拾うにはどうすればいいのでしょうか?
AddHandlerを使用してみたのですがうまくいきません。
Private ObjExcel As Object
Private ObjBook As Object
ObjExcel = CreateObject("Excel.Application")
ObjBook = ObjExcel.Workbooks.Add
AddHandler ObjBook.SheetActivate, AddressOf ExcelBook_SheetActivateEvt
Private Sub ExcelBook_SheetActivateEvt(ByVal Sh As Object)
'---処理
End Sub
出来るのかは不明
Excel プライマリ相互運用機能アセンブリ リファレンス
ApplicationClass.SheetActivate イベント
このイベントは、.NET Framework インフラストラクチャをサポートします。コードから直接使用するためのものではありません。
名前空間: Microsoft.Office.Interop.Excel
アセンブリ: Microsoft.Office.Interop.Excel (microsoft.office.interop.excel.dll 内)
WithEvents applicationClass1 As ApplicationClass
Function applicationClass1_SheetActivate(Sh As Object) As Void
Handles applicationClass1.SheetActivate
End Function
Public Overridable Event SheetActivate As AppEvents_SheetActivateEventHandler
http://msdn2.microsoft.com/ja-jp/library/microsoft.office.interop.excel.applicationclass.sheetactivate(VS.80).aspx
System.Runtime.InteropServices.ComTypes 名前空間を使って
1. 対象オブジェクト(Excel.Application や Excel.Workbook等) を
IConnectionPointContainerインターフェイス型の変数に代入。
2. IConnectionPointContainer.FindConnectionPoint または、
IConnectionPointContainer.EnumConnectionPoints を使って
IConnectionPoint インターフェイスを取得。
3. イベントコールバックを受け取るためのオブジェクトを用意し、
それを IConnectionPoint.Advise で、イベントの割り当て完了。
4. アプリ終了時など、イベントが必要なくなった時点で、
IConnectionPoint.Unadvise で割り当て解除し、不要になった
各種 COM オブジェクトを Marshal.ReleaseComObject する。
…とすればできそうな気がするのですが、実際に試した事は無いので
保証はできません。m(_ _)m
> VB2003で開発しております。
見落としていました…。
.NET 1.1 の場合は、System.Runtime.InteropServices.ComTypes 名前空間の
IConnectionPointContainer インターフェイスと
IConnectionPoint インターフェイスの代わりに、
System.Runtime.InteropServices 名前空間の
UCOMIConnectionPointContainer インターフェイスと
UCOMIConnectionPoint をインターフェイスを試してみてください。