我们有时候需要从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命令?


发表评论