【问题标题】:Allow for users to change sheet names, VSTO允许用户更改工作表名称,VSTO
【发布时间】:2013-05-24 20:22:04
【问题描述】:

这类似于我的问题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) 或 @987654324 @ 不是原始 6 中的任何名称(它们永远不会是,我已经编写了预防脚本)。

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    但我相信您需要一个加载项才能对工作表执行此操作。我不认为它可以合并到工作簿的“代码隐藏”中。

    【讨论】:

    • 感谢您挖掘这个老问题。通过添加每次打开工作簿时运行的脚本来解决问题(在 VSTO 文档级加载项中处理)。它确实会大大减慢打开速度,但它确实有效。
    猜你喜欢
    • 1970-01-01
    • 2019-11-22
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    相关资源
    最近更新 更多