我对 Visual Basic(和这个站点)非常陌生,需要一些关于如何在使用自动化时正确退出 Excel 的建议。关于我的问题的一点背景知识:我们有一个大型 Excel 工作簿,我的老板创建了它来执行数百个相对复杂的计算。目前用户只是使用电子表格来输入他们的数据,但现在我正在开发一个 vb.net 用户界面,以允许他们输入他们的数据,并为我们提供更多的灵活性和功能,让他们的生活更轻松和让他们摆脱 Microsoft Excel 的恐惧。
打开我的 .net 应用程序后,我正在运行一个命令以在后台打开工作簿(Excel 对象的可见属性设置为 false),以便我们可以使用它。在某个时候,我们会将这些计算迁移到独立的应用程序中,但目前这不是一个具有成本效益的解决方案,因此我们将使用已经开发的电子表格。我在关闭 Excel 时遇到了一个小问题。我可以使用 FormClosing 事件顺利关闭 Excel。我的问题是:如果我的应用程序正在运行(这意味着我想要的工作簿在后台打开)并且我通过桌面上的快捷方式打开另一个工作簿,当我在另一个工作簿打开时关闭我的应用程序时,它尝试关闭第二个工作簿,并使用 Excel 的保存更改对话框提示用户。我该如何解决这个问题?我是否需要找到特定于我的计算工作簿的进程并关闭它而不是关闭我创建的 Excel 对象?
这是我的 FormClosing 事件的代码:
Private Sub Form8_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
'close the workbook
xlWorkbook.Close(SaveChanges:=False)
'clean up
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook)
xlWorkbook = Nothing
'close the excel application
xlApp.Quit()
'clean up
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
xlApp = Nothing
End Sub
编辑:我知道这个问题的发生是因为 Excel 打开它的文件的方式。除非您转到开始菜单并打开一个新的 Excel 实例,否则 Excel 将在已运行的应用程序对象中打开您的文件。这让我相信这个问题可能是不可避免的,但即使你只是头脑风暴,我也会喜欢一些反馈
任何意见是极大的赞赏。谢谢,埃里克
PS,感谢将我的代码放在代码标签中的人!我保证我会自己弄清楚如何做到这一点;)