none
Word: как получить общее количество элементов последовательности SEQ? RRS feed

  • Вопрос

  • Добрый день!

    В документе Word нумерация некоторых объектов происходит через последовательность SEQ. В самом начале документа необходимо выставить общее количество таких объектов в документе. Как это правильно сделать?

Ответы

  • Если бы все нужные Вам поля были бы последовательными строками таблицы, то можно было бы использовать формулу (поле)  вида =COUNT(BELOW)  или вида =COUNT(ABOVE) и перекрестную сылку на его значение в начале документа.

     На VBA конечно тоже можно сделать. Если хотите, приведу код.

Все ответы

  • Если никаких других полей в документе нет, то можно попробовать проделать это при помощи макроса на VBA с функцией oFrmFlds.Count. К сожалению, в VBA не силен ,потому готовый пример дать не могу. Одно скажу точно - без VBA тут не обойтись.
    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий
    Follow MSTechnetForum on Twitter

    Посетите Блог Инженеров Доклады на Techdays: http://www.techdays.ru/speaker/Vinokurov_YUrij.html
    Модератор
  • Если бы все нужные Вам поля были бы последовательными строками таблицы, то можно было бы использовать формулу (поле)  вида =COUNT(BELOW)  или вида =COUNT(ABOVE) и перекрестную сылку на его значение в начале документа.

     На VBA конечно тоже можно сделать. Если хотите, приведу код.

  • Давайте :)
  • 'Процедура вставляет число полей типа SEQ, имеющих идентификатор Id, сразу после активного положения курсора в документе

    Public Sub InsertSeqCount()
    Const Id = "id1"
    Dim Count As Long
    Count = 0
    Dim str As String
    Dim fld As Field
        For Each fld In ActiveDocument.Fields
            If fld.Type = wdFieldSequence Then
                str = Replace(fld.Code, " ", "\")
                str = Right(str, Len(str) - InStr(str, "SEQ") - 2)
                If InStr("\" + str + "\", "\" + Id + "\") > 0 Then Count = Count + 1
            End If
        Next
    Selection.InsertAfter "Всего полей SEQ с идентификатором " + Id + " :" + CStr(Count)
    End Sub

  • Большое спасибо! А возможно сделать так, чтобы пересчет выполнялся автоматически, и результат, например, заносился в некоторое поле?
  • Можно пересчитывать, например, при открытии документа. Для этого можно использовать обработку события открытия документа.

    Результат можно заносить в место документа,указанное закладкой ActiveDocument.Bookmarks("Моя_закладка"), или присваивать переменной  документа (ActiveDocument.Variables) или присваивать пользовательскому свойству документа (ActiveDocument.CustomDocumentProperties).

    В первом случае можно использовать код вида

    ActiveDocument.Bookmarks("моя_закладка").Range.InsertAfter "Всего полей SEQ с идентификатором " + Id + " :" + CStr(Count)



  • Спасибо! :)
  • А как сделать, чтобы макрос автоматически выполнялся перед печатью?