Excel 2007では、Excel dnaとExcel interopを使用して、各ワークシートの選択変更に付いています。
私はapp.WorkbookActivateを使用しており、開いているワークブックを列挙しようとしています。Excel InteropワークシートSelectionWorkが開いているワークブックに添付されていない
ブックを有効にすると、新しいブック/シートが有効になります。 ただし、開いているワークブックには添付しません。エラーがない、それはちょうどあなたが新しい仕事帳を開き、誰もがなぜ知っているバック
を切り替える場合には、そのオリジナルのワークブックに付着する
動作しませんか?
ここにコードがあります。
using ExcelDna.Integration;
using XL = Microsoft.Office.Interop.Excel;
....
/// in an init method
//add event listeners to open work books and on new work books
XL.Application xlapp = (XL.Application)ExcelDnaUtil.Application;
xlapp.WorkbookActivate += Xlapp_WorkbookActivate;
ListenOnOpenWorkBooks();
private static void ListenOnOpenWorkBooks()
{
XL.Application xlapp = (XL.Application)ExcelDnaUtil.Application;
foreach (XL.Workbook wb in xlapp.Workbooks)
{
foreach (XL.Worksheet s in wb.Sheets)
{
s.SelectionChange += S_SelectionChange;
}
}
}
private static void Xlapp_WorkbookActivate(XL.Workbook Wb)
{
//TODOL check if already listening
foreach (XL.Worksheet s in Wb.Sheets)
{
s.SelectionChange += S_SelectionChange;
}
}
private static void S_SelectionChange(XL.Range range)
{
///do something
}
'ListenOnOpenWorkbooks'の中にある' xlApp'宣言を削除してみてください。あなたはすでにクラスレベルで宣言しています。これはあなたが望むものだと思います。 'Listen ...'の中にあるものは範囲外になり、 'Selection'イベントでそれを取っています...と思います。 –