Открытие Word из VBScript зависает, не могу понять, почему - PullRequest
2 голосов
/ 22 июня 2011

По профессии я не программист, так что простите, если я не знаю ни о каких стандартных инструментах отладки.

У меня есть то, что Я думал, что это очень простой VBScript (только текстовый файл, сохраненный с расширением .vbs):

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% ЦП, и сценарий никогда не проходит этот шаг.*

Как можно отладить, чтобы узнать, что, черт возьми, происходит с объектом Word ActiveX и почему он просто зависает и никогда не возвращается?

1 Ответ

2 голосов
/ 22 июня 2011

Word может ждать от вас приглашения. Я хотел бы сделать Word видимым и посмотреть, сможете ли вы визуально увидеть в чем проблема:

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