ExcelVBA中判断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
qq超拽网名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, "\"))
for是什么意思参考引⽤的资料
>骑马与砍杀光明与黑暗攻略
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论