вопрос по макросу в WORD

Статус
Закрыто для дальнейших ответов.

MAO_the_Doom

Топикстартер
15 лет на форуме
Сообщения
2 408
Реакции
224
Есть Word и есть макрос, который запускается и работает (циклично обновляет поля у активного документа) только при открытии документа. Если документы были закрыты, - то выскакивает Еггог с надписью что команда недоступна, т.к. не открыт ни один документ и ему не с чем работать.

Что в макрос нужно вписать, чтобы он переставал выполняться, когда документ закрывается?

вот сам макрос:

Не по теме:
Sub AutoOpen()
'Автообновление всех полей документа

Dim aStory As Range
Dim aField As Field
Dim myTOC As TableOfContents
Dim docFound As Boolean

For Each aStory In ActiveDocument.StoryRanges
For Each aField In aStory.Fields
aField.Update
Next aField
Next aStory
For Each myTOC In ActiveDocument.TablesOfContents
myTOC.Update
Next myTOC

Application.OnTime Now + TimeValue("00:00:30"), "AutoOpen"

End Sub

 
Ответ: вопрос по макросу в WORD

MAO_the_Doom сказал(а):
Если не секрет, где прописан этот макрос?

For Each aStory In ActiveDocument.StoryRanges
Подозреваю, надо заключить весь этот блок в условие:
Код:
If Not IsNull(ActiveDocument) Then
[INDENT]…[/INDENT]
End If

Application.OnTime Now + TimeValue("00:00:30"), "AutoOpen"
 
Ответ: вопрос по макросу в WORD

максрос прописан в normal.dotm в Word2007
После дописывания ваших строк макрос всё-равно сковырнулся (причём на вашей строке) :(
 
Ответ: вопрос по макросу в WORD

MAO_the_Doom сказал(а):
У меня 97-й. :E]

Сковырнулся на новой строке.
Что сказало-то хоть?

Возможно, в 2007 уже что-то поменялось касательно объектной модели, и вместо IsNull(object) надо использовать IsNothing(object) или даже object Is Nothing / object Is Null.
 
Ответ: вопрос по макросу в WORD

Runtime Error 4248 "данная команда не доступна, т.к. не открыт ни один документ"
IsNull - есть, а IsNothing или Is Nothing в служебных словах нету.

При нажатии Debug подсвечивается первая исполняемая строка макроса. Раньше она была "For Each aStory In ActiveDocument.StoryRanges", теперь - ваша "If Not IsNull(ActiveDocument) Then"

А в 97 макрос работает?
 
Ответ: вопрос по макросу в WORD

Код:
Sub AutoOpen()

Dim aStory As Range
Dim aField As Field
Dim myTOC As TableOfContents
Dim docFound As Boolean

If Documents.Count <> 0 Then
    For Each aStory In ActiveDocument.StoryRanges
        For Each aField In aStory.Fields
            aField.Update
        Next aField
    Next aStory
    
    For Each myTOC In ActiveDocument.TablesOfContents
        myTOC.Update
    Next myTOC
End If

Application.OnTime Now + TimeValue("00:00:30"), "AutoOpen"

End Sub
 
Ответ: вопрос по макросу в WORD

преогромнейшее спасибо! всё работает!
 
Статус
Закрыто для дальнейших ответов.