VBA代码打开word doc无法正常工作

时间:2018-06-13 04:19:44

标签: excel-vba ms-word vba excel

我已通过其他帖子搜索此主题但无法找到解决方案。我想在excel 2016中运行一些VBA代码(在运行OS 10.13.5的imac上)来打开word文档(最好是只读)。 如果word的实例已在运行,我想在继续之前关闭它。 (如果word已经运行,那么在关闭它们之前我是否想要保存其他实例会很好。) 我的代码是

Private Sub CommandButton1_Click()
Dim w As Object
' If word is already open get ahold of the running instance
' Otherwise create a new instance
On Error Resume Next
Set w = GetObject(, "Word.Application")
If w Is Nothing Then Set w = CreateObject("Word.Application")  
On Error GoTo 0
' Close all open files and shutdown Word
' Loop through any open documents and close them
Do Until w.Documents.Count = 0
    w.Documents(1).Close
Loop
w.Quit False
Set w = Nothing
' Now that all instances of word are closed, open the template
Dim wdApp As Object
Dim wdDoc As Object
Set wdApp = CreateObject("Word.application")  
wdApp.Visible = True
wdApp.DisplayAlerts = False
MYPATH = "Volumes/256SSD/""How to do stuff""/""myfile.docx"""
Set wdDoc = wdApp.Documents.Open(FileName:=MYPATH)
End Sub

当我在单词已打开的情况下运行时,我得到可变结果。有时代码通过“do until循环”运行并且似乎关闭打开的单词实例然后继续到最后一行并给出vba运行时错误“应用程序定义的或对象定义的错误”。已启动一个单词实例,正在等待输入要打开的文件。

如果我再次立即运行代码,则不会输入“do until loop”,并且要求输入文件名。 VBA给出运行时错误“自动化错误”。然后我可以从Recent Files中选择一个文件名,然后打开但运行时错误仍然存​​在,并且MYPATH中选择的文件没有打开。

我希望得到一些帮助。

1 个答案:

答案 0 :(得分:1)

代码的第一部分需要工作。

  1. 如果有多个正在运行的
  2. ,它将无法关闭所有Word实例
  3. 如果找不到已打开的Word实例,则会创建一个然后立即关闭它。
  4. 这部分可以重构为

    Dim w As Object
    On Error Resume Next
        Set w = GetObject(, "Word.Application")
    On Error GoTo 0
    Do Until w Is Nothing
        Do Until w.Documents.Count = 0
            w.Documents(1).Close SaveChanges:=-2
        Loop
        w.Quit SaveChanges:=0
        Set w = Nothing
        On Error Resume Next
            Set w = GetObject(, "Word.Application")
        On Error GoTo 0
    Loop
    On Error GoTo 0
    
相关问题