1

我制作了一个 Excel COM 加载项。现在我想控制 WorkbookBeforeClose 事件。
但是我在 Stackoverflow 上找到的解决方案(使用事件处理程序 WorkbookOpen 的 c#)不适用于我。
在我的加载项中没有 InternalStartup Sektion,只有一个 Load Sektion。
我只能通过按下功能区栏中的按钮来启动事件处理程序。
当我按下按钮 1x 时,事件处理程序会执行我想要的所有时间 Excel 加载。
当 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 回答