admin管理员组

文章数量:1794759

Excel VBA中判断word文件是否打开,未打开则打开该文件

Excel VBA中判断word文件是否打开,未打开则打开该文件

需求与场景

在Excel的VBA中,打开word文件是比较容易的,但判断某个word文件是否已经打开,则有些小坑需要注意。

因为工作需求,要把Excel中的数据写入到指定的word文件里(用链接的方式经常会出现word无响应的状况,而且数据量大的时候,打开速度实在太慢。),所以就研究了一下如何判断word文件是否被打开的情形。参考了一些资料,结合自己的理解,记录如下。

Excel VBA代码 ① 首先要在ExcelVBA工程中引入word

工具-引用,选取MicroSoft Word xx.0 Object Library

②判断指定word文件是否打开(函数) Function WordDocIsOpen(ByVal strDocName As String) As Boolean 'objWordDocName 这个变量的目的是接收一下循环出来的objWordDoc的文件名, '如果没有的话会导致if条件无法正确判断(office2010试验后结果) Dim objWordDocName As String Dim objWordApp As Object Dim objWordDoc As Object On Error Resume Next '此句是关键,因为当word文件没有被打开时,会直接报错(GetObject:Run-time error '429':) strDocName = UCase(strDocName) '将文件名字母全部大写。注意:这个参数变量必须是全路径+文件名 Set objWordApp = GetObject(, "Word.Application") For Each objWordDoc In objWordApp.Documents '遍历当前在 Word 中打开的所有 Document 对象的集合 objWordDocName = UCase(objWordDoc.FullName) 'FullName是完整路径+文件名 If objWordDocName = strDocName Then WordDocIsOpen = True Exit For Else WordDocIsOpen = False End If Next Set objWordDoc = Nothing '清变量 Set objWordApp = Nothing End Function ③判断后,打开word文件(使用函数) Sub OpenWord() If WordDocIsOpen("D:\\Test\\test.docx") Then MsgBox "该word文件已经被打开。" Else Set wrd = CreateObject("Word.Application") wrd.Visible = True wrd.Documents.Open fileName:="D:\\Test\\test.docx" Set wrd = Nothing End If End Sub ④其他一些说明

1、判断word文件是否被打开以及打开了几个,要用GetObject,而不能用CreateObject。 GetObject与CreateObject可以参看这个微软文档,写的很清楚。(无论多么简单的语言,都必须多看文档,少百度)

GetObject is used to attach to a running instance of an automation server. CreateObject is used to start a new instance of an Automation server.

2、如果不想用objWordDoc.FullName这种完整路径名的写法,可以用objWordDoc.Name,参数文件名可以这样截取:

strPath = "D:\\Test\\test.docx" docName = Right(strPath, Len(strPath) - InStrRev(strPath, "\\")) 参考引用的资料

判断指定的WORD文档是否被打开的函数代码 微软文档:word与其他应用程序进行通讯 微软文档:word(Documents对象)

本文标签: 该文件文件ExcelVBAword