VSTO Bug – GetVstoObject返回错误的工作表

我正在使用VS2013上的VSTO开发Excel的应用程序级加载项。 我的代码适用于我所有的工作表,除了一个。 我发现函数GetVstoObject正在返回一个不同于作为参数给定的表单。

这是我的即时窗口现在右:

?sheet.Name "Sheet2" ?Globals.Factory.GetVstoObject(sheet).Name "Sheet1" 

为什么发生这种情况? 我读了这个返回值只计算一次,对于后面的调用,返回caching的值。 有一些方法可以清除这个caching?

编辑:

在这个工作簿上,我有两张工作表,第一张命名为“Sheet1”,第二张命名为“Sheet2”。 我从来没有重命名或复制这些表中的一个,我刚开始一个新的工作簿,并创build一个额外的工作表。

这是我的代码进行debugging:

 Dim sheet1 As Microsoft.Office.Interop.Excel.Worksheet = formMapeamento.wb.Worksheets.Item(1) Dim sheet2 As Microsoft.Office.Interop.Excel.Worksheet = formMapeamento.wb.Worksheets.Item(2) Dim sheet1_vsto = Globals.Factory.GetVstoObject(sheet1) Dim sheet2_vsto = Globals.Factory.GetVstoObject(sheet2) Dim sheet1_vsto_inner = sheet1_vsto.InnerObject Dim sheet2_vsto_inner = sheet2_vsto.InnerObject 

这是我现在的直接窗口,有更多的数据。

 'Checking "Sheet1". Everithing looks as expected ?sheet1.Name "Sheet1" ?sheet1.Index 1 ?sheet1.CodeName "Sheet1" ?Globals.Factory.HasVstoObject(sheet1) True ?sheet1_vsto.Name "Sheet1" ?sheet1_vsto.Index 1 ?sheet1_vsto.CodeName "Sheet1" ?sheet1_vsto_inner.Name "Sheet1" ?sheet1_vsto_inner.Index 1 ?sheet1_vsto_inner.CodeName "Sheet1" 'Checking "Sheet2". STRANGE VALUES ?sheet2.Name "Sheet2" ?sheet2.Index 2 ?sheet2.CodeName "Sheet1" ?Globals.Factory.HasVstoObject(sheet2) False ?sheet2_vsto.Name "Sheet1" ?sheet2_vsto.Index 1 ?sheet2_vsto.CodeName "Sheet1" ?sheet2_vsto_inner.Name "Sheet1" ?sheet2_vsto_inner.Index 1 ?sheet2_vsto_inner.CodeName "Sheet1" 

这个问题突然开始发生。 在此之前,两张表都返回正确的值。 在我运行一段代码后(代码遍历一些范围,在工作表上添加和删除窗口combobox,显示一些表单并在CustomXMLParts上写入), sheet2_vsto开始以sheet1_vsto响应。 我保存了这个工作簿来研究这个问题,以避免这种情况发生在我的用户身上。

我再也不能重现这个问题了。 这是我第一次看到这种奇怪的行为。 我认为问题的根源在sheet2CodeName

有没有人知道这个问题的一些解决方法,或者一些原因发生?