C# Excel应用程序获取活动工作表

C# Excel应用程序获取活动工作表,c#,.net,vsto,excel-2010,excel-interop,C#,.net,Vsto,Excel 2010,Excel Interop,我正试图将工作簿.SheetActivate事件中的活动工作表作为Microsoft.Office.Tools.Excel.Worksheet对象返回,但我遇到了一些实际问题 我在运行时通过复制一个工作表,然后重命名它来创建工作表。我复制的工作表是一个模板,其中包含每个生成的excel工作表的外观 我需要获取Microsoft.Office.Tools.Excel.Worksheet对象,因为我需要在指定的Excel工作表中添加一个按钮控件 这就是我努力实现这一目标的方式: void Appli

我正试图将
工作簿.SheetActivate
事件中的活动工作表作为
Microsoft.Office.Tools.Excel.Worksheet
对象返回,但我遇到了一些实际问题

我在运行时通过复制一个工作表,然后重命名它来创建工作表。我复制的工作表是一个模板,其中包含每个生成的excel工作表的外观

我需要获取
Microsoft.Office.Tools.Excel.Worksheet
对象,因为我需要在指定的Excel工作表中添加一个按钮控件

这就是我努力实现这一目标的方式:

void Application_SheetActivate(object Sh)
{
     Excel._Worksheet test = Sh as Excel._Worksheet;
     Worksheet worksheet = Globals.Factory.GetVstoObject(test);
     MessageBox.Show(worksheet.Name.ToString());
}
这适用于Sheet1,但模板工作表和任何其他启动的工作表都会出现以下错误:
System.NullReferenceException。对象未发送到对象的实例
。运行调试器后,我可以看到第一个excel工作表已正确分配,但任何其他工作表都没有。。。我知道错误的状态和含义


我在这里做错了什么?单击工作表选项卡时,我只想返回一个
Microsoft.Office.Tools.Excel.Worksheet
类型,但我从来没有遇到过这么多问题

究竟哪行代码触发了异常?
工作表=Globals.Factory.GetVstoObject(test)这仅适用于第一个工作表,其他所有操作都会引发异常。如果要确定本机Office对象在自定义中是否具有扩展对象,请使用HasVstoObject方法。如果本机Office对象具有扩展对象,则此方法返回true,否则返回false。有关更多信息,请参阅。