1

这与我的问题类似但我的解决方法对这些实例没有帮助,而且原因更加明确。我有一个工作簿级别的自定义,它将从一个文件夹中添加工作表,它保留复制到的工作表的名称。这很好用并且不会导致任何问题,除非用户重命名工作表。如果用户重命名工作表,保存工作簿,然后返回到它,然后尝试执行任何引用工作簿或工作表的操作,他们会收到错误:

Microsoft.VisualStudio.Tools.Applications.Runtime.ControlNotFoundException: 
This document might not function as expected because the following control is missing:
Sheet5. Data that relies on this control will not be automatically displayed or updated, 
and other custom functionality will not be available. Contact your administrator or the 
author of this document for further assistance. ---> 
System.Runtime.InteropServices.COMException: Programmatic access to the Microsoft Office 
Visual Basic for Applications project system could not be enabled. If Microsoft Office 
Word or Microsoft Office Excel is running, it can prevent programmatic access from being 
enabled. Exit Word or Excel before opening or creating your project.

现在关闭和打开 Excel 没有帮助,将工作表移动到新位置没有帮助,如果添加了超过 1 个工作表,删除有问题的工作表也没有帮助。基本模板有 6 张纸,我尝试将这些纸添加到中间(我们想要它们的地方)和最后(只是为了踢球)。这似乎没有帮助。如果您删除所有添加的工作表,保存工作簿并再次打开它,则功能将恢复。添加的工作表在 VSTO 中不是命名工作表,而是主要通过编号或名称引用(有 6 个工作表开头,因此如果在 3 之后添加它们,它们的索引将为4 to (ThisWorkBook.Sheets.Count-3),或者if Sheet.Name不是原始 6 中的名称(它们永远不会出现,我已经编写了预防措施)。

我的问题是,如果我设计的报告不起作用,我真的需要能够允许用户添加通用报告表。这意味着我需要能够添加工作表,允许他们重命名、保存并返回。如果对任何人有帮助,则在保存、关闭和重新打开工作表之前不会发生此错误。我也无法在任何安装了 VS2012 的机器上复制它,即使该项目从未在该计算机上运行过(刚刚安装了 VSTO)。尽管所有这些 VS2012 机器都用于其他 Excel VSTO 项目。但是,我可以在 XP-Win8 和 Excel Office '07-365 上复制它。

**所以我提炼的问题:有没有办法允许用户添加工作表并重命名它们(最好在 VSTO 之外),而不会遇到Runtime.ControlNotFoundException?

谢谢。

4

1 回答 1

1

基本上,每次重新打开工作簿时,您都需要将工作表重新初始化为 VSTO 对象。由于这些工作表没有硬编码到您的解决方案中,因此 VSTO 无法识别它们,除非您的代码在运行时查找此类内容并“重新连接”它们。这在 VSTO 文档中进行了解释:http: //msdn.microsoft.com/en-us/library/cc442981.aspx

但我相信您需要一个加载项才能对工作表执行此操作。我认为它不能并入工作簿的“代码背后”。

于 2013-12-07T12:13:09.430 回答