我正在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实例中打开而不是新的。
答案 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 = ...
,就像你在问题中做几个地方一样。