【问题标题】:Excel file making hidden instance visibleExcel文件使隐藏实例可见
【发布时间】:2017-07-31 13:52:08
【问题描述】:

在我的 VB.Net Excel VSTO 加载项中,我在后台打开了一堆 excel 文件以从中检索信息。用户不应该看到这个,也不能与之交互。

这是通过创建一个新的 Excel 实例并使用以下代码加载文件来完成的:

Dim loadExcelInstance as Excel.Application = New Excel.Application()
loadExcelInstance.Visible = False
loadExcelInstance.Workbooks.Open("Path\To\File", False, True)

最后一部分是确保文件以只读方式打开。所有文件都在 Excel 中标记为 Shared

会发生什么,文件在后台被读取,因为它们应该是,直到发生这种情况:

当加载一个特定文件时,loadExcelInstance.Visible 属性突然变为True,并且此工作簿以及在它可见后打开的所有其他工作簿。

在此可见窗口中,显示的是工作簿本身,但通常在 Excel 中可见的功能区不显示。

昨天,这发生在一本工作簿上。将此工作簿中的所有数据复制到新工作簿,以相同名称保存并删除旧工作簿后,行为恢复正常。

今天,这发生在两个工作簿上。

有谁知道为什么会发生这种情况,我该如何预防?

编辑:在单独的测试代码中显示发生了什么:

    Dim goodTestInstance = New Excel.Application()
    goodTestInstance.Visible = False
    goodTestInstance.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable
    Dim badTestInstance = New Excel.Application()
    badTestInstance.Visible = False
    badTestInstance.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable

    goodTestInstance.Workbooks.Open("Path\To\GoodFile.xlsm", False, True)
    badTestInstance.Workbooks.Open("Path\To\BadFile.xlsm", False, True)

当代码到达好文件的开头时,它会在后台按应有的方式打开。当代码到达损坏文件的开头时,它会以可见的方式打开,但没有功能区。

【问题讨论】:

  • 特定文件上是否有事件Private Sub Workbook_Open()
  • @Vityata:在VBAProject (workbookName.xlsm) 下的excel-vba 查看器中没有任何功能,它显示Project is unviewable。这是你的意思吗?
  • 您对文件的使用是否需要启用它们的宏?如果没有,设置loadExcelInstance.AutomationSecurity=Microsoft.Office.Core.M‌​soAutomationSecurity‌​.msoAutomationSecuri‌​tyForceDisable
  • @TnTinMn:抱歉回复晚了...我尝试了您的建议,但实例仍然可见...
  • 如果禁用工作簿的任何宏执行都不能解决问题,那么我能想到的唯一可能的罪魁祸首就是您的代码或其他一些插件。如果您将代码限制为仅自行打开有问题的工作簿,它会变得可见吗?可能为此编写一个单独的测试例程。

标签: excel vb.net


【解决方案1】:

这更像是评论,但它带有图片。无论如何,你能检查一下你在那个文件中是否有这样的东西吗:

【讨论】:

  • 这似乎不是这样。唯一存在Private Sub Workbook_Open() 的地方是在加载的加载项的VBA 代码中,但这也存在于未将可见性设置为True 的文件中
  • @DrDonut 如果您完全忽略此文件,那么它可以正常工作吗?对于其他所有人?
  • 是的,如果我将“坏”文件从要加载的文件列表中取出,其余的都可以正常工作...
  • bad 文件的扩展名是否与其他文件相同? xlsx, xlsb?
  • 是的,所有文件都有 .xlsm 扩展名。
猜你喜欢
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多