【问题标题】:Getting instances of Word and saving documents获取 Word 实例并保存文档
【发布时间】:2013-11-06 03:15:04
【问题描述】:

我正在用 VBA 编写一个宏,它使用

创建一个 word 文档
Sub WriteDocument()
wordapp = CreateObject("word.Application")
letter = wordapp.Documents.Add

TypeText()

wordapp.Visible = True
End Sub

最初我通过运行宏然后关闭 word 文档而不保存它来对此进行满意的测试。现在我实际上正在保存文档,宏每次运行的时间越来越长。我认为这个问题与 WINWORD.EXE 以及文档是否保存时它的行为有关。

我尝试过使用

If wordapp Is Nothing Then
Set wordapp = CreateObject("word.Application")
End If

但是现在如果我重复运行宏而不保存,我会收到错误消息。有人可以向我解释这个问题并帮我解决吗?

我们公司最近从 Office 07 切换到 Office 10。这会影响什么吗?我注意到新文档/电子表格总是在现有的 Word/Excel 实例中打开,而不是在新实例中打开。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    您是否使用 Word 自己的 VBA 编辑器编写代码?然后,您不需要创建对 Word 应用程序实例的显式引用。只需使用默认应用程序实例,即您当前正在编写代码的应用程序实例:

    Dim doc As Document
    Set doc = Documents.Add ' don't need explicit reference to wordapp
    

    或者您是从其他 Office 应用程序调用 Word,例如Excel?那么好的,你确实需要一个对 Word 实例的显式引用。但是,您需要创建一个新实例,事实上您可能不想这样做,因为最终您可能会堆积许多正在运行的实例。相反,您可以先尝试获取现有实例:

    Dim doc As Object
    Dim wordapp As Object
    
    On Error Resume Next
    Set wordapp = GetObject(, "Word.Application")
    If wordapp Is Nothing Then Set wordapp = CreateObject("Word.Application")
    On Error GoTo 0    
    Set doc = wordapp.Documents.Add
    '...
    

    如您所见,需要进行一些错误处理以防止出现不存在实例的情况;在这种情况下,我们只是创建一个新的。

    最后,请注意,在设置对 Word 应用程序或文档等对象的引用时,必须使用关键字Set。您不能只使用作业,即说 Set wordapp = ... 而不仅仅是 wordapp = ... 就像您在问题中做了几个地方一样。

    【讨论】:

    • 感谢您的全面回复。我确实是从 Excel 中调用 Word,而您对这些集合是正确的。我还有一个问题,应该解决。如果我关闭使用 Word 中的关闭按钮创建的文档,它不会关闭 WinWord.Exe。我怎样才能解决这个问题?我曾考虑在我的 Excel 应用程序 (Workbook_BeforeClose) 中使用事件处理程序,但如果最终用户将 Word 用于其他用途,我不想关闭它。
    • 太长无法在评论中回答 -- 请作为新问题发布
    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多