Excel工作簿通过仍在任务管理器中的流程中运行的vba代码关闭

时间:2014-08-05 19:57:47

标签: excel vba

通过excel VBA我打开一个工作簿并关闭它,从而退出Excel应用程序。但它仍然在任务管理器中运行,这会阻止我的插件正常工作。部分代码如下:

Private Sub btn_Click()
  Dim oExcel As Object
  Dim oBook As Object
  Dim oSheet As Object

  Dim i  As Integer
  Dim j As Integer
  Sheets("Sheet1").Select

  Finalrow = Cells(Rows.count, 1).End(xlUp).row

  LastCol = Cells(1, Columns.count).End(xlToLeft).Column
  Set oExcel = New Excel.Application
  Set oBook = oExcel.Workbooks.Open(ADDIN_PATH & "\" & "hello.xls")
  Set oSheet = oBook.Worksheets(1)
  sCellName = "--Select--"

  oSheet.Range("A3").Value = "Name"

  If (ComboBox1.Value = "--Select--" Or ComboBox1.Value = "") Then
    MsgBox "Please Map the name field"
    'Else
    'oSheet.Range("B2").Value = ComboBox1.Value
      Exit Sub
  End If

 'oSheet.Range("B2").Value = ComboBox1.Value
  oSheet.Range("B2").Value = ComboBox1.Value

  If (ComboBox2.Value = "") Then ComboBox2.Value = sCellName

   oBook.SaveAs ADDIN_PATH & "\" & "hello.xls"
   oBook.Close
   oExcel.Quit
   Set oExcel = Nothing

   MsgBox "Your current setting has been saved"
   SettingForm.Hide
End Sub

1 个答案:

答案 0 :(得分:1)

当我在创建和操作excel应用程序/工作簿(通常来自Access)后遇到ghost Excel进程的这个问题时,我发现的解决方案始终是相同的 - 但是在我做完一些测试后,你在那里的代码不会为我创建一个幽灵过程。无论哪种方式实现此修复都应该有效,所以这里有两个建议:

1。)在创建/操作新的Excel应用程序时,您需要完全限定每个引用 - COM通过简单计数跟踪打开对象的数量 - 当您打开一个新的Excel工艺时,它会加1 ,但是如果你使用两个打开来做一个不合格的引用(比如,使用Cells(Rows.Count,1)...而不是oExcel.Workbooks(oBook.Name).Worksheets(oSheet.Name).Cells(oExcel.Workbooks(oBook.Name).WorkSheets(oSheet.Name).Rows.Count,1)...,它会再次上升,现在即使它们全部关闭,COM对象的内部计数仍然是在1和Excel保持打开状态。(显然你不必每次都输入完整的东西,就在创建对象时。)所以我会使用 -

dim thisSheet as Worksheet
set thisSheet = ActiveWorkbook.Worksheets(1)
thisSheet.Activate

即使现在不是导致问题的原因,在从其他应用程序自动化Excel时执行Sheets("Sheet1")之类的操作,而没有附带的工作簿/应用程序参考也是100%保证进行重影过程。

当您为所有Rows.Count,Columns.Count等执行此操作时,我认为您也应该指定组合框的工作表。

2。)完成所有这些后,确定哪一行增加COM对象计数的可靠方法是将oExcel.Quit行移到Set oExcel = New Excel.Application行之后,并保持重新运行它并将oExcel.Quit线进一步向下移动,直到遇到鬼过程,这将是你的罪魁祸首。

我希望这有助于修复它,我浪费了太多时间类似的问题,希望它是同样的根本原因。

相关问题