1

Тема: Поле SEQ

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

2

Re: Поле SEQ

Материал с сайта: внешняя ссылка
Сейчас, к сожалению, найти его в интернете не могу.

Коды полей: SEQ (последовательность)

Поле SEQ (последовательность) служит для последовательной нумерации глав, таблиц, рисунков и других элементов в документе. При добавлении, удалении или перемещении элемента и соответствующего ему поля SEQ можно обновить остальные поля SEQ в документе, чтобы отразить новую последовательность.
Поле LISTNUM также обеспечивает автоматическую нумерацию и может быть лучшим вариантом, если нужно создать сложный нумерованный список.
Самым простым способом вставки полей SEQ для нумерации таблиц, фигур и других элементов в документе является использование команды Название, которая вызывается кнопкой Вставить название в группеНазвания на вкладке Ссылки.

ПРИМЕЧАНИЕ.   Поле SEQ в колонтитулах, примечаниях или сноске не влияет на последовательность нумерации, полученной из полей SEQ в тексте документа.

Синтаксис

При просмотре кода поля SEQ в документе его синтаксис выглядит следующим образом:
{ SEQ Идентификатор [Закладка ] [Ключи ] }
ПРИМЕЧАНИЕ.   Код поля определяет то, что будет отображаться в поле. Результаты поля — это то, что отображается в документе после оценки кода поля. Для переключения между кодом поля и его результатами нажмите сочетание клавиш ALT+F9.

Инструкции

Идентификатор
Имя, присвоенное ряду нумеруемых элементов. Имя должно начинаться с буквы, а его длина не должна превышать 40 знаков (букв, цифр и знаков подчеркивания). Например, ряд таблиц может иметь имя "таблицы".

Закладка
Закладка может указывать на элемент в любом месте документа. Например, чтобы создать перекрестную ссылку на рисунок, пометьте нумерацию поля SEQ для этого рисунка закладкой "Рис2", а затем вставьте перекрестную ссылку на нумерацию, используя поле { SEQ illust Рис2 }.

Ключи
\c
Повторяет ближайший предыдущий номер последовательности. Это полезно для вставки номеров глав в верхние или нижние колонтитулы.

\h
Скрывает результат поля. Используйте этот ключ для указания поля SEQ в перекрестной ссылке без вывода номера. Например, можно сослаться на пронумерованную главу, но не выводить ее номер. Ключ "\h" не скрывает результат поля, если также указан ключ формата (\*).

\n
Вставляет следующий порядковый номер для указанных элементов. Этот ключ используется по умолчанию.

\r n
Сбрасывает порядковый номер до указанного числа n. Например, поле { SEQ figure \r 3 } начинает нумерацию рисунка с номера 3.

Примечание: Для установки последовательности, начинающейся с номера n нужно установить только первое поле с этим ключом. Остальные поля последовательности должны быть обычными: { SEQ figure }.

Другое возможное решение – настройка последовательности с помощью поля формулы:
{ = 14 + { Seq Unit } }
Сначала оформляем поле формулы
{ = 14 + 1 }
а затем вместо 1 внутри поля формулы можно вставить поле простой последовательности
{ Seq Unit }
(например, с помощью комбинации клавиш Ctrl-F9).

\s
Сбрасывает порядковый номер до уровня заголовка, указанного после "s". Например, поле { SEQ figure \s 2 }начинает нумерацию со стиля заголовка 2.

Примеры
Если для форматирования заголовков документа не используются стили, заголовки глав можно пронумеровать, вставив поле SEQ в начале каждой главы.
•    Результатом текста и поля "Глава { SEQ chapter }" будет строка наподобие "Глава 3."
•    Чтобы вывести номер главы в верхнем или нижнем колонтитуле, используйте ключ "\c".
•    Результатом кода "Стр. { SEQ chapter \c } - { PAGE }" будет строка наподобие "Стр. 3 - 1".

Еще один пример:
Код поля с форматом числа:
{SEQ  Cheques \# "00000000" \* MERGEFORMAT}

В формате вы указываете то количество нулей, сколько цифр в числе нужно.
Обязательно нужно регулярно обновлять поля:
Выделить все - F9.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

3

Re: Поле SEQ

Нашел вторичную ссылку в интернете на описание кодов полей SEQ:
внешняя ссылка

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

4

Re: Поле SEQ

Большое спасибо за ответ!
Но меня интересует как через VBA можно получить список идентификаторов, которые стоят в полях SEQ. Например: есть {SEQ Идент1} и {SEQ Идент2}, нужно получить  список Идент1, Идент2.

5

Re: Поле SEQ

N_I_KK пишет:

Но меня интересует как через VBA можно получить список идентификаторов, которые стоят в полях SEQ.

Для этого нужно программировать на VBA (простите за капитанский ответ). Готовое решение вам тут никто не даст, я уверен (если только кому-то вдруг эта задача не покажется интересной, конечно).

Могу намекнуть, как это сделать:
1) Включаете коды полей (ALT+F9)
2) Ищете (CTRL+H) с галочкой Подстановочные знаки текст вида "SEQ * \" (без кавычек, естественно). Примечание - Звездочка * это любая последовательность знаков.
3) Далее записываете найденный результат в строковую переменную (String), отрезаете ненужные части "SEQ " и " \", заносите в массив, если в массиве этого значения нет.
4) Поиск в колонтитулах и надписях это сложно. Могу дать только ссылку на английскую статью Using a macro to replace text where ever it appears in a document внешняя ссылка

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

6

Re: Поле SEQ

Александр Б. пишет:

2) Ищете (CTRL+H) с галочкой Подстановочные знаки текст вида "SEQ * \"

Исправление! Надо искать "SEQ * \\". То есть с двумя обратными чертами. При включенных подстановочных знаках обратная косая черта это же спецсимвол.

Еще добавка: лучше сначала провести поиск поля SEQ (без подстановочных знаков .MatchWildcards = False)

With Selection.Find
    .text = "^d SEQ" ' ищем поле SEQ
    .Replacement.text = ""
...

И только потом в найденном искать остальное.

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

7

Re: Поле SEQ

Всем спасибо!
С перебором всех полей я, конечно, осилю задачку. Я думал, что есть возможность с помощью каких либо встроенных средств VBA получить этот список.

8

Re: Поле SEQ

N_I_KK пишет:

Я думал, что есть возможность с помощью каких либо встроенных средств VBA получить этот список.

Лучше перебрать все поля, идентифицировать поля SEQ и обработать их, напр., как в коде ниже. Подпрограммы GetHead и GetTail я использую для разбора строк - они очень полезны. GetHead возвращает кусок исходной строки до заданной подстроки, а GetTail - после заданной подстроки.

'''-----------------------------------------

Sub ListFields()
Dim afld As Field
Dim fcode As String
Dim fname As String
Dim frange As Range
Dim fcodeitems As Variant
Set frange = ActiveDocument.Range
For Each afld In frange.Fields
    fcode = afld.Code
    fname = UCase$(Trim(fcode)) & " "
    fname = Trim$(GetHead(fname, " "))
    If UCase$(fname) = "SEQ" Then
        'Обработать поле SEQ
       
    End If
Next
End Sub

Public Function GetHead(ByVal input_line As String, ByVal sep_line As String) As String
'get substring from the beginning of the input_line till
'the char, preceding the sep_line
'Dim input_line As String
'Dim sep_line As String
Dim i_sep As Integer
Dim output_line As String

i_sep = InStr(input_line, sep_line)
'MsgBox Str$(i_sep)
If i_sep > 0 Then
   output_line = Mid$(input_line, 1, i_sep - 1)
Else
   output_line = ""
End If
GetHead = output_line
End Function

Public Function GetTail(ByVal input_line As String, ByVal sep_line As String) As String
'get the input_line substring after the sep_line
'Dim input_line As String
'Dim sep_line As String
Dim i_sep As Integer
Dim output_line As String

i_sep = InStr(input_line, sep_line)
If i_sep > 0 Then
   If i_sep = Len(input_line) - Len(sep_line) + 1 Then
      output_line = ""
   Else
      output_line = Mid$(input_line, i_sep + Len(sep_line))
   End If
Else
   output_line = ""
End If
GetTail = output_line
End Function

9

Re: Поле SEQ

yshindin пишет:

    If UCase$(fname) = "SEQ" Then
        'Обработать поле SEQ
       
    End If

Можно и так (используя константы VBA):
If afld.Type = wdFieldSequence Then
    'Обработать поле SEQ
Endif

10

Re: Поле SEQ

yshindin пишет:

Можно и так (используя константы VBA):
If afld.Type = wdFieldSequence Then
    'Обработать поле SEQ
Endif


Привожу для сведения константы VBA для типов полей Word и их значения:
(внешняя ссылка)

        wdFieldEmpty = 0xffffffff,
        wdFieldRef = 3,
        wdFieldIndexEntry = 4,
        wdFieldFootnoteRef = 5,
        wdFieldSet = 6,
        wdFieldIf = 7,
        wdFieldIndex = 8,
        wdFieldTOCEntry = 9,
        wdFieldStyleRef = 10,
        wdFieldRefDoc = 11,
        wdFieldSequence = 12,
        wdFieldTOC = 13,
        wdFieldInfo = 14,
        wdFieldTitle = 15,
        wdFieldSubject = 16,
        wdFieldAuthor = 17,
        wdFieldKeyWord = 18,
        wdFieldComments = 19,
        wdFieldLastSavedBy = 20,
        wdFieldCreateDate = 21,
        wdFieldSaveDate = 22,
        wdFieldPrintDate = 23,
        wdFieldRevisionNum = 24,
        wdFieldEditTime = 25,
        wdFieldNumPages = 26,
        wdFieldNumWords = 27,
        wdFieldNumChars = 28,
        wdFieldFileName = 29,
        wdFieldTemplate = 30,
        wdFieldDate = 31,
        wdFieldTime = 32,
        wdFieldPage = 33,
        wdFieldExpression = 34,
        wdFieldQuote = 35,
        wdFieldInclude = 36,
        wdFieldPageRef = 37,
        wdFieldAsk = 38,
        wdFieldFillIn = 39,
        wdFieldData = 40,
        wdFieldNext = 41,
        wdFieldNextIf = 42,
        wdFieldSkipIf = 43,
        wdFieldMergeRec = 44,
        wdFieldDDE = 45,
        wdFieldDDEAuto = 46,
        wdFieldGlossary = 47,
        wdFieldPrint = 48,
        wdFieldFormula = 49,
        wdFieldGoToButton = 50,
        wdFieldMacroButton = 51,
        wdFieldAutoNumOutline = 52,
        wdFieldAutoNumLegal = 53,
        wdFieldAutoNum = 54,
        wdFieldImport = 55,
        wdFieldLink = 56,
        wdFieldSymbol = 57,
        wdFieldEmbed = 58,
        wdFieldMergeField = 59,
        wdFieldUserName = 60,
        wdFieldUserInitials = 61,
        wdFieldUserAddress = 62,
        wdFieldBarCode = 63,
        wdFieldDocVariable = 64,
        wdFieldSection = 65,
        wdFieldSectionPages = 66,
        wdFieldIncludePicture = 67,
        wdFieldIncludeText = 68,
        wdFieldFileSize = 69,
        wdFieldFormTextInput = 70,
        wdFieldFormCheckBox = 71,
        wdFieldNoteRef = 72,
        wdFieldTOA = 73,
        wdFieldTOAEntry = 74,
        wdFieldMergeSeq = 75,
        wdFieldPrivate = 77,
        wdFieldDatabase = 78,
        wdFieldAutoText = 79,
        wdFieldCompare = 80,
        wdFieldAddin = 81,
        wdFieldSubscriber = 82,
        wdFieldFormDropDown = 83,
        wdFieldAdvance = 84,
        wdFieldDocProperty = 85,
        wdFieldOCX = 87,
        wdFieldHyperlink = 88,
        wdFieldAutoTextList = 89,
        wdFieldListNum = 90,
        wdFieldHTMLActiveX = 91,
        wdFieldBidiOutline = 92,
        wdFieldAddressBlock = 93,
        wdFieldGreetingLine = 94,
        wdFieldShape = 95
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.