我对Visual Basic(和本站点)非常陌生,并且需要关于如何在使用自动化时正确地退出Excel的小建议。关于我的问题的一点背景:我们的老板创建了一个大型Excel工作簿,用于执行数百个相对复杂的计算。目前用户只是使用电子表格输入他们的数据,但现在我正在使用vb.net用户界面来允许他们输入数据,并为我们提供更多的灵活性和功能,使他们的生活更轻松,让他们摆脱微软Excel的恐怖。VB.NET关闭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,感谢谁把我的代码在代码标签!我保证我会自己弄清楚如何做到这一点;)
当你打开你的文件,当你说“在后台”,你的意思是说excel是可见的(最小化)还是隐藏? – NickSlash
我的意思是隐藏的Excel ...可见属性设置为false,但即使当我将Excel对象设置为可见时,也会出现此问题,因此可能不是问题 – TypeM1smatch
是否希望您的Excel表单为只读? (所以你只是阅读公式,最后应该丢弃任何更改) – NickSlash