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

3 篇文章 2 订阅

需求与场景

在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对象)

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值