Word Макрос: Установить табуляцию в списках во всём документе

Автор StudentS, 24 марта 2016, 11:38

StudentS

Подскажите, как автоматом во всем документе установить нужную позицию табуляции во всех видах списков (и нумерованных, и маркированных). Причем у цифр от 1 до 9 она должна быть одна, у цифр от 10 до 99 другая и от 100 до 999 третья (чтобы одинаковый отступ текста от цифр был).

У меня в примере от цифр от 1 до 9 табуляция 1,75, а от цифр от 10 до 12 - 2,02.

[вложение удалено администратором]

Администратор

Могу предложить такой вариант. В нём не вставляется табуляция, а происходит изменение структуры списков - символ "Табуляция" заменяется на пробел. При этом текст от номера всегда будет на расстоянии пробела.

Обратите внимание, что у первого списка отображаются номера второго уровня. Чтобы это увидеть: щёлкните правой кнопкой мыши по номеру - Изменить отступы в списке... - появится диалог, в котором видно, что число "1" относится ко второму уровню.
То есть в файле какой-то сбой со списками.

Макрос
Sub Макрос1()

    Dim par As Paragraph, lstlevel As ListLevel, i As Long
   
   
    '1. Отключение монитора.
    Application.ScreenUpdating = False
   
    '2. Удаление табуляторов с линейки.
    For i = 1 To ActiveDocument.ListParagraphs.Count Step 1
        ActiveDocument.ListParagraphs(i).TabStops.ClearAll
    Next i

    '3. Замена символов "Табуляция" на пробелы.
    For i = 1 To ActiveDocument.Lists.Count Step 1
        ' Vba-именование первого абзаца-списка.
        Set par = ActiveDocument.Lists(i).ListParagraphs(1)
        ' Цикл по всем уровням списка.
        For Each lstlevel In par.Range.ListFormat.ListTemplate.ListLevels
            ' Проверка, есть ли пробел после номера.
            If lstlevel.TrailingCharacter <> wdTrailingSpace Then
                ' Установка пробела в шаблоне списка.
                lstlevel.TrailingCharacter = wdTrailingSpace
            End If
            ' Установка отступов.
            lstlevel.NumberPosition = CentimetersToPoints(1.25)
            lstlevel.TextPosition = CentimetersToPoints(0)
        Next lstlevel
    Next i
   
    '4. Включение монитора.
    Application.ScreenUpdating = True
   
    '5. Сообщение.
    MsgBox "Готово.", vbInformation
   
End Sub
[свернуть]


Примечание

В ворде есть понятие "список". Он создаётся так: вкладка Главная - группа Абзац - и здесь три кнопки.
Такие списки не путайте с обычным текстом в виде списка, когда спереди абзаца от руки напечатано тире. Данный макрос не считает этот текст списком, т.к. у меня макрос работает со списками.

Для работы с псевдосписками нужно делать уже что-то другое.

StudentS

Большое спасибо! Все получается!