Excel VSTO加载项,用于在我的功能区中放置一个按钮。
我已经确定了问题所在,但我不知道为什么这会给我一个错误或如何解决它。更有趣的是,如果我留在同一个excel实例中,它可以正常工作。我可以多次运行加载项而没有任何问题。现在打开一个新的excel实例,我得到一个COMException。
Excel.Workbook thisWorkbook = Globals.ThisAddIn.Application.ActiveWorkbook;
//...
//Run some code
//Run the below function (my function)
setTheseColumnHeaders(thisWorkbook.Worksheets[1], someList)
//Run some more code
Globals.ThisAddIn.Dispose(); //added this line to see if it would help, but didn't change anything.
第一次运行加载项时,这不会给我任何问题,但现在第二次,thisWorkbook
似乎是一个空对象,因此在其上调用Worksheets[1]
会导致错误。
不确定为什么会发生这种情况 - 如果我打开一个新的excel实例,并尝试运行加载项,运行一次后,它应该创建新对象,但我不知道为什么{{1} }返回一个空的com对象。
以下是我的问题涉及的步骤:
现在,打开相同的表单,我刚刚运行了VSTO -
现在,如果我关闭两个实例并尝试运行与第二次相同的参数,一切正常。
答案 0 :(得分:0)
我想我现在知道问题是什么。正如documentation所说,_Application.ActiveWorkbook
在某些情况下可以返回null。因此,当您打开一些弹出窗口时,它会从excel获取焦点,并且不再有活动工作簿。也许,如果你只有一个工作簿,它可以猜测它是唯一活跃的选项。但是,如果你有两个工作簿,它只能返回null。所以我建议存储一些变量,并在打开弹出窗口之前对工作簿进行引用。