允许用户更改工作表名称VSTO

时间:2013-05-24 20:22:05

标签: vb.net excel visual-studio-2012 vsto worksheet

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

但我相信你需要一个加载项来为表单执行此操作。我不认为它可以被纳入工作簿的“代码背后”。