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 回答