Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2011, 14:15   #1
nii-kto
 
Регистрация: 28.11.2011
Сообщений: 3
По умолчанию Борьба с автонумерацией многоуровневого списка

Word 2003. Есть очень большой документ, для нумерации пунктов которого используется автонумерация. Требуется порезать его по пунктам второго-третьего уровня на отдельные документы. Порезать могу и ручками. Но при этом нумерация сбивается - а она должна быть сохранена.
Word даёт изменить ("начать с") только последнее число в нумерации, что не подходит. Замена всей нумерации на простой текст ручками тоже не подходит: в документе могут быть и изменения, а пунктов гораздо больше, чем нарезаемых кусков (резать ручками - приемлемо, нумеровать - нет).
Есть мысль преобразовать нумерацию в простой текст силами VBA (есть опыт по ваянию в Экселе). Пните, пожалуйста, в правильном направлении.
nii-kto вне форума Ответить с цитированием
Старый 30.11.2011, 18:38   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> Есть мысль преобразовать нумерацию в простой текст силами VBA

Попробуйте
Код:
Sub ParNum2Text()
Dim i&, li, fli, ls$
For i = ActiveDocument.Paragraphs.Count To 1 Step -1
    With ActiveDocument.Paragraphs(i).Range
        ls = .ListFormat.ListString 'текст нумерации
        If ls <> "" Then 'есть нумерация
            li = .ParagraphFormat.LeftIndent
            fli = .ParagraphFormat.FirstLineIndent
            .InsertBefore ls & vbTab 'или " ", если он служит разделителем между номером и текстом
            .ListFormat.RemoveNumbers wdNumberParagraph
            .ParagraphFormat.LeftIndent = li
            .ParagraphFormat.FirstLineIndent = fli
        End If
    End With
Next
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 30.11.2011, 19:25   #3
nii-kto
 
Регистрация: 28.11.2011
Сообщений: 3
По умолчанию

Супер! Всё работает!
За исключением того, что в ls могут быть не номера, а "o", например. Но это уже частности, выясню и поправлю.
Спасибо!
nii-kto вне форума Ответить с цитированием
Старый 30.11.2011, 20:40   #4
nii-kto
 
Регистрация: 28.11.2011
Сообщений: 3
По умолчанию

Как-то так:

Код:
Sub ParNum2Text()
Dim i&, li, fli, ls$, fs$
For i = ActiveDocument.Paragraphs.Count To 1 Step -1
    With ActiveDocument.Paragraphs(i).Range
        ls = .ListFormat.ListString 'текст нумерации или обозначение элемента списка
        fs = Left(ls, 1)
        If ls <> "" And fs >= "0" And fs <= "9" Then 'есть нумерация
            li = .ParagraphFormat.LeftIndent
            fli = .ParagraphFormat.FirstLineIndent
            .InsertBefore ls & vbTab 'или " ", если он служит разделителем между номером и текстом
            .ListFormat.RemoveNumbers wdNumberParagraph
            .ParagraphFormat.LeftIndent = li
            .ParagraphFormat.FirstLineIndent = fli
        End If
    End With
Next
End Sub
nii-kto вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
борьба c masm32 Krasi Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 12 02.02.2014 05:53
преобразование многоуровневого списка в таблицу krad3 Microsoft Office Word 11 12.11.2010 15:27
Помогите пожалуйста с Автонумерацией ! В Excele . Ofelok Microsoft Office Excel 12 14.04.2009 17:21