【发布时间】: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.MsoAutomationSecurity.msoAutomationSecurityForceDisable -
@TnTinMn:抱歉回复晚了...我尝试了您的建议,但实例仍然可见...
-
如果禁用工作簿的任何宏执行都不能解决问题,那么我能想到的唯一可能的罪魁祸首就是您的代码或其他一些插件。如果您将代码限制为仅自行打开有问题的工作簿,它会变得可见吗?可能为此编写一个单独的测试例程。