Я не работал с моделью событий Word в Word 2010, но есть несколько вещей, на которые я бы посмотрел.
Сначала посмотрите, есть ли дополнительные события, которые вы можете подключить. В Word 2000 я вижу только New
, Open
и Close
. Возможно, в Word 2010 есть другие события, такие как Loaded
? Если это так, вы можете попытаться поместить код в одно из тех событий, где документ уже обязательно будет загружен.
В противном случае вы могли бы написать некоторый код, который «ждет», пока ActiveDocument
не будет установлен для экземпляра объекта. Вы можете попробовать что-то вроде этого:
Private Sub Document_Open()
Do While ActiveDocument Is Nothing
DoEvents
Loop
If ActiveDocument.Type = wdTypeDocument Then
Debug.Print "Now the document is open"
End If
End Sub
DoEvents
в цикле должно позволять загружать документ, а условие While
в конечном итоге поймет, что ActiveDocument
не Nothing
, и позволит программе продолжаться. Конечно, это предполагает, что документ фактически станет открытым, но это стоит попробовать. Чтобы понять, как может работать этот код, посмотрите на следующий код:
Private Sub Document_Open()
Dim dtmLater As Date
Dim doc As Document
dtmLater = DateAdd("s", 5, Now())
Do While doc Is Nothing
DoEvents
If Now() >= dtmLater Then
Set doc = ActiveDocument
End If
Loop
If ActiveDocument.Type = wdTypeDocument Then
Debug.Print "Now the document is open"
End If
End Sub
Приведенный выше код произвольно приостанавливается на 5 секунд, чтобы вы могли видеть, как код зацикливается, пока не будет установлен объект doc
. Как только объект создан, код может двигаться вперед.