Вопрос или проблема
Ms Word: Количество слов отображается с заголовком 1
Здравствуйте,
Я ищу помощь!
По запросу безопасности мне необходимо показать количество слов, содержащихся в абзаце, начинающемся с заголовка 1, в больших документах.
Для больших документов, содержащих большое количество заголовков 1, я ищу способ, макрос, для отображения количества слов под этим заголовком, как показано в примере ниже.
Ниже представлен желаемый результат рассматриваемого макроса.
Количество слов в абзаце, следующем за каждым заголовком 1, отображается в конце текста заголовка 1. В приведенном ниже примере показаны абзацы с заголовками 1.
Спасибо за вашу помощь
omnis voluptas (255 слов)
Ut vehicula, sapien vitae pharetra elementum, odio tortor sagittis magna, a efficitur ante nunc in nisl. Mauris sit amet metus sem. Sed porta accumsan tortor. Quisque vitae lobortis turpis. Donec euismod erat at tincidunt interdum. Fusce neque elit, sodales nec nisl vitae, rhoncus facilisis odio. Donec condimentum ullamcorper turpis, eget sollicitudin odio vestibulum ut. Nullam lectus velit, elementum ultricies lorem vel, mollis placerat sapien. Donec fringilla sem vel leo ullamcorper consectetur.
Nunc fermentum sapien ac semper malesuada. In tortor lacus, pulvinar et viverra eu, accumsan non orci. Nullam tristique consectetur augue nec scelerisque. Sed mattis neque id risus pretium, sed porta magna elementum. Proin placerat felis risus, id semper turpis elementum non. Sed posuere elit at eros finibus, ullamcorper volutpat purus pellentesque. Donec a nunc scelerisque, efficitur ipsum sed, tempus justo. Aliquam non commodo mi. Nullam euismod eu tortor in facilisis. Proin vitae leo nec sem egestas gravida et at mi. Fusce vulputate, mi ut maximus dapibus, eros velit suscipit dui, ut viverra lacus tellus id augue. Aenean turpis enim, tempor vitae lacus ac, aliquam tincidunt est. Proin tempor ex ac sapien condimentum venenatis.
Nullam at felis non ex ullamcorper vestibulum non ac tellus. Nulla aliquam elementum condimentum. Donec sit amet justo non est imperdiet pharetra. Suspendisse sollicitudin risus nec nisi placerat imperdiet. Donec suscipit massa eget placerat blandit. Nunc aliquet condimentum nulla, condimentum faucibus odio accumsan a. Maecenas vitae mollis ante, sed ornare orci.
Aenean non (131 слов)
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vehicula iaculis ante, a faucibus elit faucibus sit amet. Curabitur cursus libero magna. Aenean porttitor augue non diam mattis efficitur. In pellentesque eros odio, sit amet fermentum ante interdum sed. Mauris mollis imperdiet lacus, eu semper mauris molestie vitae. Sed pellentesque eleifend bibendum. Pellentesque elementum arcu sed feugiat scelerisque. Phasellus ac est ultricies, faucibus mi eget, sollicitudin turpis. Aenean non neque luctus, commodo sapien eu, egestas sem. Duis finibus maximus lacus sit amet commodo. Nam ante mi, ornare in tortor vitae, cursus fringilla tellus. Duis pharetra facilisis varius. Aenean rutrum justo sit amet dapibus dapibus. Maecenas sodales tempus tortor, ac iaculis ante sagittis in. Suspendisse vel nisl sodales, viverra sapien eget, vehicula risus. Aliquam pellentesque diam mattis, suscipit nisl ut, congue libero.
venenatis (305 слов)
Maecenas mollis aliquam ex, eu scelerisque odio varius vitae. Donec mi mauris, mattis sit amet vulputate quis, vestibulum eget arcu. Nunc euismod non lectus vel pulvinar. Ut interdum cursus velit, vitae consectetur enim iaculis id. Cras placerat leo aliquam sapien aliquam ultrices. In placerat justo eu ipsum blandit, sed auctor erat interdum. Praesent vel arcu nec lacus luctus sagittis a quis libero. Mauris eu odio quis lorem ornare mattis. Pellentesque venenatis nulla vitae consectetur posuere. Integer sit amet felis sed tortor pharetra mollis. Nam quis odio rhoncus, efficitur arcu at, viverra felis. Vestibulum consectetur venenatis varius. Donec egestas tortor tortor, at dapibus risus ultricies in.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc,
exercitationem (200 слов)
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere
reprehenderit (129 слов)
“Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?”
Я пробовал макросы, используя “количество слов”.
Но я не нашел способ подсчитать слова между заголовками.
Затем отобразить этот общий объем слов в заголовке того же абзаца.
Sub SelectParagraphsBetweenLevelOneHeadings()
Dim doc As Document
Dim para As Paragraph
Dim levelOneHeadings As Collection
Dim i As Integer
Dim cnt() As Long
Set doc = ActiveDocument
Set levelOneHeadings = New Collection
For Each para In doc.Paragraphs
If para.OutlineLevel = wdOutlineLevel1 Then
levelOneHeadings.Add para.Range
End If
Next para
ReDim cnt(1 To levelOneHeadings.count)
For i = 1 To levelOneHeadings.count - 1
cnt(i) = doc.Range(levelOneHeadings(i).End, levelOneHeadings(i + 1).Start).ComputeStatistics(wdStatisticWords)
Next i
cnt(levelOneHeadings.count) = doc.Range(levelOneHeadings(levelOneHeadings.count).End, doc.Content.End).ComputeStatistics(wdStatisticWords)
For i = 1 To levelOneHeadings.count
With levelOneHeadings(i)
.End = .End - 1
.InsertAfter " " & cnt(i)
End With
Next i
End Sub
Ответ или решение
Certainly! Here’s a detailed and thorough guide on how to create a Microsoft Word macro that counts the number of words in paragraphs following Heading 1 headings (Heading 1) and displays that count in parentheses next to each heading.
Введение
Microsoft Word является мощным инструментом для создания документов, и макросы — это один из способов автоматизации задач, таких как подсчет слов в больших текстах. В данной инструкции мы рассмотрим, как написать макрос, который будет подсчитывать количество слов в каждом параграфе, следующем за заголовками первого уровня (Heading 1), и добавлять этот результат рядом с заголовком.
Шаги для создания макроса
-
Открытие редактора VBA:
- Запустите Microsoft Word.
- Нажмите
Alt + F11
, чтобы открыть редактор Visual Basic for Applications (VBA).
-
Создание нового модуля:
- В редакторе VBA щелкните правой кнопкой мыши на
ThisDocument
в вашем проекте. - Выберите
Insert
->Module
. Это создаст новый модуль.
- В редакторе VBA щелкните правой кнопкой мыши на
-
Вставка кода макроса:
- Скопируйте и вставьте следующий код в модуль:
Sub SelectParagraphsBetweenLevelOneHeadings()
Dim doc As Document
Dim para As Paragraph
Dim levelOneHeadings As Collection
Dim i As Integer
Dim cnt() As Long
Set doc = ActiveDocument
Set levelOneHeadings = New Collection
' Собираем все заголовки первого уровня
For Each para In doc.Paragraphs
If para.OutlineLevel = wdOutlineLevel1 Then
levelOneHeadings.Add para.Range
End If
Next para
ReDim cnt(1 To levelOneHeadings.count)
' Подсчет слов в абзацах между заголовками
For i = 1 To levelOneHeadings.count - 1
cnt(i) = doc.Range(levelOneHeadings(i).End, levelOneHeadings(i + 1).Start).ComputeStatistics(wdStatisticWords)
Next i
' Подсчет слов после последнего заголовка
cnt(levelOneHeadings.count) = doc.Range(levelOneHeadings(levelOneHeadings.count).End, doc.Content.End).ComputeStatistics(wdStatisticWords)
' Вставка количества слов рядом с заголовками
For i = 1 To levelOneHeadings.count
With levelOneHeadings(i)
.End = .End - 1
.InsertAfter " (" & cnt(i) & " слов)"
End With
Next i
End Sub
-
Сохраните книгу с макросами:
- Нажмите
Alt + Q
, чтобы закрыть редактор VBA. - Сохраните документ как файл Word с поддержкой макросов (
*.docm
).
- Нажмите
-
Запуск макроса:
- Нажмите
Alt + F8
в Word, выберитеSelectParagraphsBetweenLevelOneHeadings
, а затем нажмите кнопкуRun
.
- Нажмите
Описание кода
- Сбор заголовков: Макрос проходит по всем абзацам и собирает те, которые являются заголовками первого уровня (Heading 1).
- Подсчет слов: Для каждого заголовка подсчитывается количество слов в следующих абзацах до следующего заголовка.
- Вставка результата: После каждого заголовка макрос добавляет количество слов в формате " (X слов)".
Заключение
Создание макроса в Word позволяет значительно ускорить процесс работы с большими документами, где требуется подсчет слов в каждом разделе. С помощью этого простого кода вы сможете легко и быстро получать необходимую информацию о содержимом документа. Не забудьте протестировать макрос на нескольких документах, чтобы убедиться в его корректной работе.