从VBScript打开Word挂起,无法弄清楚原因

时间:2011-06-22 05:25:50

标签: vbscript ms-word activex

我不是一个真正的交易程序员,所以请原谅我,如果我不知道任何标准的调试工具。

我有I thought was a very simple VBScript(仅使用.vbs扩展程序保存的txt文件):

Const wdDoNotSaveChanges = 0
Const wdRevisionsViewFinal = 0
Const wdFormatPDF = 17

Dim arguments
Set arguments = WScript.Arguments

Function DOC2PDF(sDocFile)

  Dim fso ' As FileSystemObject
  Dim wdo ' As Word.Application
  Dim wdoc ' As Word.Document
  Dim wdocs ' As Word.Documents

  Set fso = CreateObject("Scripting.FileSystemObject")
  sDocFile = fso.GetAbsolutePathName(sDocFile)
  sPdfFile = fso.GetParentFolderName(sDocFile) + "\" + fso.GetBaseName(sDocFile) + ".pdf"

  Set wdo = CreateObject("Word.Application")
  Set wdocs = wdo.Documents

  Set wdoc = wdocs.Open(sDocFile)

  if fso.FileExists(sPdfFile) Then
    fso.DeleteFile sPdfFile, True
  End If

  Set wview = wdoc.ActiveWindow.View
  wview.ShowRevisionsAndComments = False
  wview.RevisionsView = wdRevisionsViewFinal
  wdoc.SaveAs sPdfFile, wdFormatPDF
  wdo.Quit wdDoNotSaveChanges

  Set fso = Nothing
  Set wdo = Nothing

End Function
但是,以下一行引起了巨大的悲痛:

Set wdoc = wdocs.Open(sDocFile)

有时Word ActiveX对象只是在此步骤冻结。我已经通过一些超级简单的调试验证了这一点,在每一行之后放置一个WriteLine并查看它停止的位置。

Word只是坐在那里消耗100%的CPU,脚本永远不会超过这一步。

如何进行调试以了解Word ActiveX对象到底发生了什么,为什么它只是悬挂而永不返回?

1 个答案:

答案 0 :(得分:2)

Word可能正在等待您的提示。我会让Word可见,看看你是否可以直观地看到问题所在:

  Set wdo = CreateObject("Word.Application")
  'if memory serves, this should make Word visible
  wdo.Visible = true
  Set wdocs = wdo.Documents