VBA代码大全030:如何用vba强制关闭word进程?

我们有时候需要从word中提取数据到excel中。

 

这时候一般的套路都是在excel vba中创建word应用程序实例,然后一番操作以后关闭word应用程序。

 

一般的结构都是形如下面这样的:

 

Sub 水星Excel()
    '前期引用
    'Dim oWord As Word.Application
    'Set oWord = New Word.Application
    '后期引用
    'Set oWord = VBA.CreateObject("Word.Application")
    Dim oDoc
    Set oDoc = oWord.Documents.Open(sPath & "\abc.doc")
    '***********
    '接下来是一段word数据的提取操作
    '***********
    '关闭打开的文档
    oDoc.Close (False)
    '退出Word应用程序
    oWord.Quit
End Sub

 

这里会有个问题,就是最后的 oWord.Quit 好像是把word应用程序关闭了,但是事实上往往经常是关闭不成功的,如果打开系统任务管理器,会发现实际上word.exe进程仍然存在。

 

这样就会出现当再次运行这个代码时,出现重新加载word应用程序时卡顿的情况,导致代码长时间不响应。

 

这里介绍一段代码放在上面的结构的最后,可以强制的关闭任何存在的word.exe进程,从而扫清障碍。

 

代码如下:

 

Sub 水星Excel()
    Dim sCmd As String
    '强制关闭word进程
    sCmd = "cmd /c Taskkill /im winword.exe /f /t"
    Shell sCmd
End Sub

 

上述代码的意思是用dos 命令 taskkill 强制关闭word进程。

 

关于在vba中使用dos命令可以看往期文章VBA代码大全016:如何用vba执行DOS命令?

       

发表评论