Форум программистов, компьютерный форум, киберфорум
MS Office Word
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 11.11.2022
Сообщений: 26

Как в VBA Word получить/достать номера абзацов?

15.11.2022, 13:56. Показов 1633. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Как в VBA Word достать номера абзацов? (отмечено красным на скрине)
У меня есть код, который обрабатывает таблицы в Word'e и берёт последний абзац перед каждой таблицей. Есть необходимость достать номер тоже.
Код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub KPI()
Dim wd As New Document
Set wd = ActiveDocument
tc = wd.Tables.Count
ReDim mas(1 To tc, 1 To 10)
For i = 1 To tc
    If i = 1 Then
        Set ps = wd.Range(0, wd.Tables(1).Range.Start - 1).Paragraphs
    Else
        Set ps = wd.Range(wd.Tables(i - 1).Range.End, wd.Tables(i).Range.Start - 1).Paragraphs
    End If
    For lp = ps.Count To 1 Step -1
        If Len(ps(lp)) > 5 Then
            mas(i, 1) = CleanString(ps(lp))
            Exit For
        End If
    Next
    For k = 1 To wd.Tables(i).Rows.Count
        mas(i, k + 1) = CleanString(wd.Tables(i).Cell(k, 2).Range)
    Next
Next
Set xl = CreateObject("Excel.Application")
xl.Visible = True
xl.Workbooks.Add.Sheets(1).Cells(1).Resize(tc, 10).Value = mas
Set xl = Nothing
End Sub
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2022, 13:56
Ответы с готовыми решениями:

Как двойной абзац заменить на абзац с нижней границей?
Есть текст, в котором периодически друг за другом идут два абзаца. Мне нужно один убрать, а после...

Как в Word 2010 аккорду "Ctrl ё" присвоить действие кнопки "формат по абзацу"
Скажите, плиз... как в Word 2010 аккорду "Ctrl+ё" присвоить действие кнопки "Формат по абзацу"....

Как в Word заменить абзацы на перенос строки?
Здравствуйте. У меня в текстовом (*.txt) файле список английских слов с переводами, которые надо...

27
1 / 1 / 0
Регистрация: 11.11.2022
Сообщений: 26
17.11.2022, 18:21  [ТС]
Студворк — интернет-сервис помощи студентам
Пробовал на компе коллеги: Win10, Офис 2019, результат как у меня
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12511 / 5085 / 814
Регистрация: 07.08.2010
Сообщений: 14,959
Записей в блоге: 4
17.11.2022, 18:43
Baxtiyor1916,
попробуем по частям
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Sub MM221117KF21()
'' макрос должен вывести в отладке(ексель отключила)
''tables= 3
'' 0     1     34    СВЕДЕНИЯ ОБ ОСНОВНЫХ НЕДОСТАТКАХ
'' 1     1     38   1. НЕДОСТАТКИ ПО НАЧИСЛЕНИЮ ПРОЦЕНТОВ
'' 1     2     81   1.1 Недостатки по начислению процентов / Краткосрочные кредиты (риск – высокий)
'' 2     2     80   1.2 Недостатки по взысканию процентов / Среднесрочные кредиты (риск – средний)
'' 2     1     40   2. НЕДОСТАТКИ ПО ПЕРВИЧНОМУ МОНИТОРИНГУ
'' 1     2     50   2.1 Риски в программе CRM Bullit (риск – низкий)
 
Debug.Print "''tables="; Word.ActiveDocument.Tables.Count
Dim DOC As Document, J1, KT As Long, KX As Long
Dim S1, S1A, S2
 
Dim PR As Paragraph
Dim RN As Range
Dim MACT(0 To 10, 0 To 8) As String
Set DOC = Word.ActiveDocument
KT = 0
KX = 0
For Each PR In DOC.Paragraphs
Set RN = PR.Range
 
If RN.Information(wdWithInTable) = True Then
S2 = PR.Range.Text
KX = KX + 1
If KX = 1 Then KT = KT + 1
''Debug.Print KT, KX, S1, S2;
MACT(KT, 0) = S1
    With DOC.Tables(KT)
        For J1 = 1 To 7
        MACT(KT, J1) = CleanString(.Rows(J1).Range.Cells(2).Range.Text)
        Next J1
    End With
Else
    S1A = CleanString(PR.Range.ListFormat.ListString & " " & PR.Range.Text)
    
    If Len(S1A) > 5 Then
    S1 = S1A
    Else
    GoTo next_pr
    End If
    With PR.Range.ListFormat
    Debug.Print .ListValue,
    Debug.Print .ListLevelNumber, Len(S1A), S1A;
    End With
    
    KX = 0
    ''Debug.Print S1;
End If
next_pr:
Next PR
'''''''''''''''''''''''''
Exit Sub
'''''''''''''''''''''''''
Dim XL As Object
Set XL = CreateObject("Excel.Application")
XL.Visible = True
With XL.Workbooks.Add.Sheets(1)
    .Cells(1).Resize(10, 8).Value = MACT
    With .UsedRange
        .ColumnWidth = 27
        .Columns(2).ColumnWidth = 72
        .Columns(6).ColumnWidth = 72
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = True
    End With
End With
Set XL = Nothing
End Sub
0
1 / 1 / 0
Регистрация: 11.11.2022
Сообщений: 26
18.11.2022, 07:38  [ТС]
результат тот же:
может проблема в .ListLevelNumber?
Миниатюры
Как в VBA Word получить/достать номера абзацов?  
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12511 / 5085 / 814
Регистрация: 07.08.2010
Сообщений: 14,959
Записей в блоге: 4
18.11.2022, 08:39
[quote="Baxtiyor1916;16573748"]может проблема в .ListLevelNumber?[/quot]
возможно, но я это проверить не смогу

кстати 999999 - это признак того, что уровень .ListLevelNumber не определен
0
1 / 1 / 0
Регистрация: 11.11.2022
Сообщений: 26
18.11.2022, 08:42  [ТС]
Понятно, спасибо за помощь.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12511 / 5085 / 814
Регистрация: 07.08.2010
Сообщений: 14,959
Записей в блоге: 4
18.11.2022, 08:48
Лучший ответ Сообщение было отмечено Baxtiyor1916 как решение

Решение

Baxtiyor1916,
кстати, посмотрите тему Замена строк с номерами, установленными форматом номеров, на обычные строки с номерами
сообщение 5(добавочная ссылка)

попробуйте убрать номера в дубле документа - вам ведь не сам документ нужен, а екселька
1
1 / 1 / 0
Регистрация: 11.11.2022
Сообщений: 26
18.11.2022, 09:29  [ТС]
Спасибо, кажется это решило мою проблему.
Только я тамошний код немного изменил (изменил ListParagraphs на Paragraphs):
Visual Basic
1
2
3
4
5
Sub ddd()
For x = ActiveDocument.Paragraphs.Count To 1 Step -1
    ActiveDocument.Paragraphs(x).Range.ListFormat.ConvertNumbersToText
Next
End Sub
потому что на ListParagraphs у меня дало ошибку отсутствует элемент семейства под таким номером
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12511 / 5085 / 814
Регистрация: 07.08.2010
Сообщений: 14,959
Записей в блоге: 4
18.11.2022, 09:35
Цитата Сообщение от Baxtiyor1916 Посмотреть сообщение
Только я тамошний код немного изменил
у меня и оригинал сработал - все-таки 365 чем то отличается от word2019
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2022, 09:35

Word. Выравнивание абзацев
Профессионалы и любители, прошу дать совет и наставление. Здравствуйте! Мне необходимо выполнить...

Размещение абзацев на странице word
Уважаемые участники форума, подскажите, пожалуйста, как сделать, чтобы несколько абзацев...

Удалить текст до абзаца Microsoft Word
Здравствуйте. Помогите решить проблему. Имеется телепрограмма в вордовском файле, каналы разбиты...

Почему поиск не видит некоторые знаки конца абзаца в документе Word?
https://hsto.org/webt/5e/3c/13/5e3c131577786311221106.png Некоторые знаки конца абзаца ведут...

Прибить все абзацы в таблице MS Word 2013
Добрый день! Подскажите код макроса, который бы мог удалить все абзацы в таблице MS Word 2013....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru