退出/重新启动控制excel的单词macros

我正在运行一个字macros

  1. 初始化Excel
  2. 在excel中创build一个临时工作簿
  3. 当退出单词用户窗体,终止excel

但是,似乎有一些剩余的Excel实例/工作簿没有完全closures,因为当我再次启动单词macros,我得到错误:462,远程服务器机器…

在word文档中初始化用户表单:

private sub commandbutton1_click() dim exc as excel.application set exc as new excel.application dim wb as excel.workbook set wb = exc.workbook.saveas filename:="wordexc" 'creates temp workbook userform1.show end sub run excel processing via a userform1 commandbutton: private sub commandbutton2_click() excel.workbook("wordexc").close 'closes temp workbook dim wb as excel.workbook set wb = excel.workbook.saveas filename:="wordexc" 'this wb is for actual use 'i do not delete this wb after running cuz it has stored data that will be used 'if user cliks commandbutton2 again, it will be deleted and new wbook with new data 'is created 'processing code end sub private sub queryclose (etc...) 'Close Excel Dim sKillExcel As String sKillExcel = "TASKKILL /F /IM Excel.exe" Shell sKillExcel, vbHide end sub 

顺便说一句,我认为这个问题是最后一部分:

  Dim sKillExcel As String sKillExcel = "TASKKILL /F /IM Excel.exe" Shell sKillExcel, vbHide 

因为如果我停止macros,终止在任务pipe理器EXCEL,如果我再次运行macros,它不会给我这个问题…我也尝试其他方法,如调用一个Excel工作簿,我保存在一个目录而不是临时一个通过createobject(“excel.application”)在一个子exc.quit,但我必须使用上面的cuz终止代码,否则EXCEL仍然显示在任务pipe理器。

除了没有正确地声明你的对象,你没有(如果我可以这样说)冲洗正确的马桶。

看到这个例子(UNTESTED)

我正在使用Latebinding而不是早期绑定,以便此代码与任何版本的Excel兼容

 '~~> Define your Excel objects so that they are available '~~> in other userform sub procedures as well. Dim oXLApp As Object, oXLwb As Object Private Sub CommandButton1_Click() Set oXLApp = CreateObject("Excel.Application") '~~> Show Excel oXLApp.Visible = True '~~> Add a new workbook Set oXLwb = oXLApp.Workbooks.Add ' '~~> Do some stuff ' '~~> Save the file oXLwb.SaveAs "C:\wordexc.xlsx", FileFormat:=51 oXLwb.Close SaveChanges:=False End Sub '~~> Close and Quit Excel (Flush Toilet) Private Sub CommandButton2_Click() oXLApp.Quit Set oXLwb = Nothing Set oXLApp = Nothing End Sub 

为什么不这样做呢? 基本上,你可以定义全局的excel对象,然后你可以调用它的“退出”方法。

 Private objExcel As Excel.Application Private Sub CommandButton1_Click() Set objExcel = New Excel.Application objExcel.Visible = True End Sub Private Sub CommandButton2_Click() objExcel.Quit End Sub