1

Excel COM アドインを作成します。今、WorkbookBeforeClose イベントを制御したいと思います。
しかし、私が Stackoverflow で見つけたソリューション (イベント ハンドラー WorkbookOpen を使用する c# ) は、私にとってはうまくいきません。
私のアドインには、InternalStartup Sektion がなく、Load Sektion しかありません。
リボン バーのボタンを押すことによってのみ、イベント ハンドラーを開始できます。
Button 1x を押すと、Excel が読み込まれている間、Eventhandler が必要なことを実行します。
Excelを閉じて再起動したら、ボタンをもう一度押す必要があります。
Excelが最初の空のワークブックをロードしている間にイベントハンドラーが開始する方法はありますか???
ヘルプや解決策はありますか???

ありがとう、よろしく
ステファン

EventHandler に使用するコードは次のとおりです。

public partial class Excel2SE  
{  
   Excel.AppEvents_WorkbookBeforeCloseEventHandler EventDel_BeforeBookClose;

private void Excel2SE_Load(object sender, RibbonUIEventArgs e)
{
   EventDel_BeforeBookClose = new Excel.AppEvents_WorkbookBeforeCloseEventHandler(BeforeBookClose);
}

private void btn_Start_Click(object sender, RibbonControlEventArgs e)
{
   wbEventhandlerStart();
}

private void wbEventhandlerStart()
{
   Excel.Application app = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
   app.WorkbookBeforeClose += EventDel_BeforeBookClose;
} 

// This Works when Excel Close
private void Excel2SE_Close(object sender, EventArgs e)
{
    MessageBox.Show("Excel close");
} 

// This works after Pushing the Start Button and the Workbook Close
private void BeforeBookClose(Excel.Workbook Wb, ref bool Cancel)
{
    MessageBox.Show("WB close");
} 
4

1 に答える 1

1

これは Visual Studio Office アドインですか? そのように思えますが、そうであれば、ThisAddIn.cs で次の 2 つのメソッドを確認してください。

private void ThisAddIn_Startup(object sender, EventArgs e)
{

}
private void ThisAddIn_Shutdown(object sender, EventArgs e)
{

}

実行したいコードをThisAddIn_Shutdownメソッドの近くに追加できます。このコードを確実に実行する方法はありませんが、ユーザーが Excel を「正しく」閉じた場合にのみ実行されます。タスクマネージャーなどを使用して終了すると、すべての賭けが無効になります。

于 2013-11-04T15:34:35.023 に答える