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