1

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

4

1 回答 1

1

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

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

或者您是从其他 Office 应用程序(例如 Excel)调用 Word?那么好的,你确实需要一个对 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
'...

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

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

于 2013-11-04T20:13:19.377 回答