1

vsto excelアドインを作成していて、現在のスプレッドシートでウィンドウを閉じるボタンが押されたときに現在の機能を変更するか、関数を呼び出す機能を追加する方法を見つけようとしています。これが可能かどうか誰かが知っているか、何か提案がありますか?私はこれまで何も見つけることができませんでした。

4

1 に答える 1

0

Workbook クラスには、ワークブックが閉じられるタイミングを検出するために使用できる BeforeClose というイベントがあります。このイベントを使用して、Cancel パラメーターを true に設定することで、イベントが閉じられないようにすることもできます。

現在のブックでこのイベントを検出するには、現在のブックで BeforeClose イベントのイベント ハンドラーをアタッチする必要があります。

最も簡単な方法は、Application.WorkbookActivate が発生したときにイベント ハンドラーを BeforeClose イベントにアタッチすることです。そして、以前にアクティブだったワークブックから切り離します。

例えば

private Workbook _activeWorkbook = null;

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    Application.WorkbookActivate += Application_WorkbookActivate;

    // Attach to the BeforeClose event on the Workbook that 
    // was created when Excel started
    _activeWorkbook = Application.ActiveWorkbook;
    if (_activeWorkbook != null)
    {
        _activeWorkbook.BeforeClose += ActiveWorkbook_BeforeClose;
    }
}

private void Application_WorkbookActivate(Microsoft.Office.Interop.Excel.Workbook Wb)
{
    if (_activeWorkbook != null)
    {
        _activeWorkbook.BeforeClose -= ActiveWorkbook_BeforeClose;
        Marshal.ReleaseComObject(_activeWorkbook);
    }

    _activeWorkbook = Wb;
    _activeWorkbook.BeforeClose += ActiveWorkbook_BeforeClose;
}

private void ActiveWorkbook_BeforeClose(ref bool Cancel)
{
    Cancel = MessageBox.Show("Do you want to close the workbook?", "Close Workbook", MessageBoxButtons.YesNo) != DialogResult.Yes;
}

したがって、現在の機能を変更したり、現在のスプレッドシートでウィンドウを閉じるボタンが押されたときに関数を呼び出す機能を追加したりする場合は、コードを ActiveWorkbook_BeforeClose メソッドに追加します。

于 2013-10-21T13:53:01.937 に答える