2014-04-14 3 views
1

Недавно мы обновили до Office 2010 с 2003 года. Код типа VBScript, который отлично работает в 2003 году, теперь прерывается с перерывами в 2010 году, при этом «ошибка объекта» или «команда не удалась».Word 2010 «ошибка объекта» при загрузке шаблона

Из-за того, что мне удалось сработать, это, по-видимому, является результатом нормального шаблона, все еще загружающего/загружаемого, несмотря на завершение вызова CreateObject. Когда код работает, кажется, что нормальная загрузка быстро.

Код:

Dim oWord As Object 
Set oWord = CreateObject("Word.Application") 
oWord.Visible = True 
Set document = oWord.Documents.Open("\\networkshare\networkshare\mytemplate.dot") 

код не будет работать на «Set документа =»

Я искал решение, чтобы это, однако, я не нашел никаких следов людей, имеющих эту проблему в другом месте. Если я вставляю задержку между oWord.Visible и Set document, проблема будет решена. Я бы предпочел исправить это правильно, хотя мы часто занимаемся многими сотнями документов за один проход. Я попытался обнаружить завершение загрузки для Normal, однако в этом отношении не удалось.

Кто-нибудь еще видел эту проблему и нашел решение?

Большое спасибо

Филипп

ответ

0

Может быть, вы должны попробовать «захватить» объект 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, возможно, вам понадобится Visible после его открытия.

+0

Привет Патрик, Я попытался с помощью GetObject, но вопрос до сих пор остается для первого документа, созданного. Это было бы хорошо, если бы я мог гарантировать, что экземпляр Word уже будет открыт. я в конечном итоге происходит с вашим вторым предложением, что я не уверен, является лучшим с точки зрения наилучшей практики, однако единственный вариант, который работает: Set oWord = CreateObject («Word.Application») On Error Резюме Далее Set oDoc = Nothing Do While ODoc Is Nothing \t Set oDoc = oWord.Documents.Открыть ([путь шаблона]) \t Loop On Error Goto 0 Спасибо за вашу помощь с этим вопросом. – Philip

0

код, который был использован для решения этой проблемы:

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: Существует ошибка принтера»

+0

Приятный выбор в настройках принтера по умолчанию. Я видел Макросы на некоторых Шаблонах, которые ** ASSUMED **, порт принтера одинаковый для всех компьютеров (что для меня оказалось неверным) и вызвало ошибки. В вашем случае шаблонный макрос должен делать больше, чем предполагать наличие принтера на конкретном порту. – PatricK