Vbscript Word 2010模板加载过程中的“对象错误”

Vbscript Word 2010模板加载过程中的“对象错误”,vbscript,word-2010,Vbscript,Word 2010,我们最近已从2003年升级到Office 2010。2003年运行良好的VBScript类型代码现在在2010年间歇性失败,出现“对象错误”或“命令失败” 根据我的努力,这似乎是正常模板仍在下载/加载的结果,尽管CreateObject调用已完成。当代码运行时,似乎normal加载得很快 代码: 设置文档时代码失败= 我一直在寻找解决办法,但是我没有在其他地方发现有人有这个问题。如果我在oWord.Visible和Set document之间插入延迟,问题就解决了。不过,我更愿意正确地解决这个问

我们最近已从2003年升级到Office 2010。2003年运行良好的VBScript类型代码现在在2010年间歇性失败,出现“对象错误”或“命令失败”

根据我的努力,这似乎是正常模板仍在下载/加载的结果,尽管CreateObject调用已完成。当代码运行时,似乎normal加载得很快

代码:

设置文档时代码失败=

我一直在寻找解决办法,但是我没有在其他地方发现有人有这个问题。如果我在oWord.Visible和Set document之间插入延迟,问题就解决了。不过,我更愿意正确地解决这个问题,因为我们经常在一次运行中处理数百个文档。 我已尝试检测正常加载的完成情况,但在这方面未成功

还有其他人看到这个问题并找到了解决方案吗

非常感谢


Philip

可能是您应该在创建Word对象之前尝试获取它

Dim oWord As Object
On Error Resume Next
Set oWord = GetObject(,"Word.Application")
If oWord Is Nothing Then Set oWord = CreateObject("Word.Application")
或者,禁用警报,并将oWord.Documents.Open放入循环中。等待几次,间隔一秒或直到打开.dot模板,然后重新启用警报

由于它位于网络共享上,因此延迟很可能高于本地存储设备上的延迟。这或许可以解释为什么等待可以奏效


根据.dot模板的功能,您可能希望它在打开后可见。

用于解决此问题的代码:

Set oWord = CreateObject("Word.Application")
On Error Resume Next
Set oDoc = Nothing
Do While oDoc Is Nothing
Set oDoc = oWord.Documents.Open([template path])
<Wait 50ms>
Loop On Error Goto 0
离题,但对其他有此问题的人有用: 从Word 2010开始,ActivePrinter属性现在区分大小写,因此您必须确保大写字母与“打印机”对话框中显示的相同。
Word 2010在设置此属性失败时生成的错误是Microsoft Word:出现打印机错误

Hi Patrick,我尝试使用GetObject,但问题仍然存在于创建的第一个文档中。如果我能保证一个Word实例已经打开,这将是很好的。最后,我同意了你的第二个建议,我不认为这是最佳实践,但唯一有效的选项是:Set oWord=CreateObjectWord.Application On Error Resume Next Set oDoc=Nothing Do While oDoc is Nothing Set oDoc=oWord.Documents.Open[模板路径]在错误转到0时循环感谢您对此问题的帮助。很好地了解了默认打印机设置。我在一些模板上看到过宏,它们假设所有计算机的打印机端口都是相同的,这对我来说是错误的,并导致了错误。在您的情况下,template宏的作用不仅仅是假定打印机在特定端口上可用。
Set oWord = CreateObject("Word.Application")
On Error Resume Next
Set oDoc = Nothing
Do While oDoc Is Nothing
Set oDoc = oWord.Documents.Open([template path])
<Wait 50ms>
Loop On Error Goto 0