获取Word的实例并保存文档

时间:2013-11-04 19:41:06

标签: vba ms-word

我正在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实例中打开而不是新的。

1 个答案:

答案 0 :(得分: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 = ...,就像你在问题中做几个地方一样。