22295


お世話になります。

VB.NET(FrameWork4.0)でエクセル（2007）で動作するアドイン（ＶＳＴＯ）を作成しております。

表題の通りでございますがエクセルからタスクバー等を通じて他のアプリケーションが選択された時にアドイン側でフォーカスを失った（Deactive)になった事を知る方法はございますでしょうか？

VisualStudio2010でRibbon1.vbやThisAddIn.vbのイベントを調べてみましたが所要の要件を満たすイベントがありませんでした。

ご存知の方居られましたらご協力お願いします。

※回答を受けてThisAddIn.vbを以下のように修正

`Imports Microsoft.Office.Interop.Excel`  
`Public Class ThisAddIn`  
`Private Sub ThisAddIn_Startup() Handles Me.Startup`  
`AddHandler Me.Application.WindowDeactivate, AddressOf
Me.Application_WindowDeactivate`  
`End Sub`  
``  
`Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown`  
``  
`End Sub`  
`Private Sub Application_WindowDeactivate(Wb As
Microsoft.Office.Tools.Excel.Workbook, Wn As Window)`  
`MsgBox("Deactive")`  
`End Sub`  
`End Class`

と修正後、デバッグを実行してExcelが立ち上がった事を確認後、下のタスクバーから他のソフトをアクティブにしても Msgboxは動作しませんでした。


CC BY-SA 3.0
2016-02-19T23:26:37.343
22291
2016-02-20T04:03:53.997
2016-02-20T04:03:53.997
14436
14436
question
visual-studio vb.net excel
Excelアドイン（VSTO）でアドインもしくはExcelがフォーカスを失った（他のアプリが選択された）事を検知したい


`Microsoft.Office.Interop.Excel.Application`クラスのイベントを利用すればよいのではないかと思います。

まず、`ThisAddIn_Startup`等でイベントハンドラーを登録します。

[code]

    AddHandler Me.Application.WindowDeactivate, AddressOf Application_WindowDeactivate
    
[/code]

登録するイベントハンドラーのシグネチャは以下のようになります。

[code]

    Private Sub Application_WindowDeactivate(Wb As Workbook, Wn As Window)
    
    End Sub
    
[/code]


CC BY-SA 3.0
2016-02-20T02:02:45.133
22295
2016-02-20T02:02:45.133
5750
22291
answer