If (Documents.count = 1) And (ActiveDocument.Name = ThisDocument.Name) Then
Application.DisplayAlerts = False
Application.Quit (wdDoNotSaveChanges)
Else
Application.DisplayAlerts = False
ActiveDocument.Close (wdDoNotSaveChanges)
End If
我在以上代码中有问题,即当代码清除第一个If语句(意味着它是唯一打开的文档并且文档名称符合预期)时,它仍然无法完全关闭Word应用程序。相反,它只会关闭文档,然后留下一个“空白”的Word窗口。
我知道它正在清除第一个If语句,因为我向调试文件快速检查了每个元素,而且所有内容都按预期显示出来。此外,如果我逐步执行代码,它确实按照应该移动。
有趣/令人沮丧的是,如果我在调试模式下逐步执行代码并到达应用程序退出代码部分,它确实可以退出整个程序!所以我真的不确定为什么当我只运行代码而不是逐步执行它时它不起作用。
尝试过:
1 - 在Application.Quit之后添加“Exit Sub”行
2 - 显式将Word应用程序设置为对象:
Dim wObj As Object
Set wObj = CreateObject("word.Application")
'Application.Quit (wdDoNotSaveChanges) '
wObj.Quit (wdDoNotSaveChanges)
Set wObj = Nothing
3 - 添加一个“before close”事件:
Sub DocumentBeforeClose()
ActiveDocument.Saved = True
End Sub
任何帮助都将不胜感激!
ThisDocument
是什么吗?看起来你进入了 else 分支。 - Dirk VollmarThisDocument
是 Word VBA 对象引用,指向包含正在执行的 VBA 代码的文档。如果只有一个文档处于打开状态且它就是包含代码的文档,则该子程序应该退出 Word;否则,它应该只关闭打开的文档。 - DaveThisDocument
是什么。我之前表达得不够清楚,抱歉... - Dirk Vollmar