Vba 如何从Excel中确保特定Word文档已打开或未打开?

Vba 如何从Excel中确保特定Word文档已打开或未打开?,vba,excel,ms-word,Vba,Excel,Ms Word,我希望我的excel宏通过在模板word文档中放置书签后插入电子表格数据来创建报告 但是我发现,如果模板word文档已经打开,宏将崩溃,,因此模板文档将被锁定为只读,不再可由宏访问 即使模板word文档已打开,是否有方法防止then宏崩溃 下面是我的代码 Set wdApp = CreateObject("Word.Application") 'Create an instance of word Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Pa

我希望我的excel宏通过在模板word文档中放置书签后插入电子表格数据来创建报告

但是我发现,如果模板word文档已经打开,宏将崩溃,,因此模板文档将被锁定为只读,不再可由宏访问

即使模板word文档已打开,是否有方法防止then宏崩溃

下面是我的代码

Set wdApp = CreateObject("Word.Application") 'Create an instance of word

Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Path & "\Templates\Template_Confirmation.docx") 'Create a new confirmation note

下面是评论中建议的演变:

一个函数,用于测试文件是否打开,并提供在测试时直接设置文件的功能

如何使用它:

Sub test()
Dim WdDoc As Word.Document

Set WdDoc = Is_Doc_Open("test.docx", "D:\Test\")
MsgBox WdDoc.Content
WdDoc.Close
Set WdDoc = Nothing
End Sub
以及功能:

Public Function Is_Doc_Open(FileToOpen As String, FolderPath As String) As Word.Document
'Will open the doc if it isn't already open and set an object to that doc
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document

On Error Resume Next
'Set wrdApp = GetObject(, "Word.Application")
If wrdApp Is Nothing Then
    Set wrdApp = CreateObject("Word.Application")
    Set wrdDoc = wrdApp.Documents.Open(FolderPath & FileToOpen)
Else
    On Error GoTo NotOpen
    Set wrdDoc = wrdApp.Documents(FileToOpen)
    GoTo OpenAlready
NotOpen:
    Set wrdDoc = wrdApp.Documents.Open(FolderPath & FileToOpen)
End If

OpenAlready:
On Error GoTo 0

Set Is_Doc_Open = wrdDoc

Set wrdApp = Nothing
Set wrdDoc = Nothing

End Function
唯一的缺点是,您没有Word应用程序的引用…


欢迎任何建议/改进

我想这会对你的问题有所帮助在发帖前做些调查。英志杰:答案对你有帮助吗?如果是,并且您的问题已解决,请接受答案,将您的问题标记为已解决(在“向上/向下投票”下打勾,将变为绿色),如果不接受,请告诉我们问题在哪里issue@R3uK你好这确实很有帮助。我已经接受了你的回答。我是这个论坛的新手,所以我不太熟悉它。谢谢你的信息@谢谢你!