1

Тема: Автоматизация создания списка сокращений

Добрый день!

Я хочу усовершенствовать известный макрос, выложенный здесь
внешняя ссылка

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

Я хочу, чтобы во вторую колонку автоматически вставлялась расшифровка аббревиатуры, а в третью - вместо номера страницы число вхождений данной аббревиатуры в тексте.

Итак, есть Документ 1.
С помощью описанного макроса из него создается таблица сокращений в Документе 2.

Псевдокод моего макроса должен выглядеть как-то так:
Создаем из первой колонки Документа 2 диапазон (range).
Организуем цикл для текста в каждой ячейке диапазона.
Подсчитать количество символов в

2

Re: Автоматизация создания списка сокращений

Я хочу усовершенствовать макрос, выложенный здесь
внешняя ссылка

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

Я хочу, чтобы во вторую колонку автоматически вставлялась расшифровка аббревиатуры, а в третью - вместо номера страницы число вхождений данной аббревиатуры в тексте.

Думаю реализовать это следующим образом.
Есть Документ 1.
С помощью описанного макроса из него создается таблица сокращений в Документе 2.

Алгоритм представляется мне следующим образом.
Создаем из первой колонки диапазон (range).
Организуем цикл для текста в каждой ячейке диапазона.
Подсчитать количество символов в *текст_ячейки*, записать в переменную А.
Найти первое вхождение *текст_ячейки* в Документе 1.
Выделить слева от него число слов, равное А.
Скопировать выделение в буфер обмена.
Вставить содержимое буфера обмена в ячейку 2 текущей строки Документа 2.
Вернуться в Документ 1, снять выделение.
Организовать цикл поиска *текст_ячейки* с подсчетом числа вхождений.
   With ActiveDocument.Find
...
      Do While .Execute
         i = i + 1
      Loop
   End With
Вернуться в Документ 2.
Записать значение i в третью ячейку текущей строки.
Переход к следующей строке таблицы сокращений.

Можно ли как-то усовершенстовать этот алгоритм? Как это реализовать на уровне кода?

3

Re: Автоматизация создания списка сокращений

Клавицепс пурпуреа пишет:

Я хочу усовершенствовать макрос, выложенный здесь
внешняя ссылка

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

Я хочу, чтобы во вторую колонку автоматически вставлялась расшифровка аббревиатуры, а в третью - вместо номера страницы число вхождений данной аббревиатуры в тексте.

Думаю реализовать это следующим образом.
Есть Документ 1.
С помощью описанного макроса из него создается таблица сокращений в Документе 2.

Алгоритм представляется мне следующим образом.
Создаем из первой колонки диапазон (range).
Организуем цикл для текста в каждой ячейке диапазона.
Подсчитать количество символов в *текст_ячейки*, записать в переменную А.
Найти первое вхождение *текст_ячейки* в Документе 1.
Выделить слева от него число слов, равное А.
Скопировать выделение в буфер обмена.
Вставить содержимое буфера обмена в ячейку 2 текущей строки Документа 2.
Вернуться в Документ 1, снять выделение.
Организовать цикл поиска *текст_ячейки* с подсчетом числа вхождений.
   With ActiveDocument.Find
...
      Do While .Execute
         i = i + 1
      Loop
   End With
Вернуться в Документ 2.
Записать значение i в третью ячейку текущей строки.
Переход к следующей строке таблицы сокращений.

Можно ли как-то усовершенстовать этот алгоритм? Как это реализовать на уровне кода?

Алгоритмизация неплохая) Вам бы подчитать объекты и методы хотя бы по справке и сможете смело писать. Не совсем ясно, что уже имеется, откуда берутся нужные аббревиатуры и их расшифровки. Будет разный код, если уже есть список аббревиатур и если их надо искать по заглавным буквам (несколько рядом). + откуда берутся расшифровки, будет ли в файле формат "ЕАЭС - Евразийский экономический союз". Подсчитать уже не сложно: либо циклом с поиском, как вы предложили "Do while - Loop" с подсчётом, либо разово поиском и заменой, т.е. меняем нашу аббревиатуру на абракадабру, например "####", а затем по макросу умных людей отслеживаем изменения:

Sub Количество_замен()
    
Dim N As Long
    
    ActiveDocument.Revisions.AcceptAll ' принимаем все изменения
    ActiveDocument.TrackRevisions = True ' активируем контроль изменения
    With Selection.Find
        .Text = "111" ' найти
        .Replacement.Text = "222" ' заменить
        .Execute Replace:=wdReplaceAll ' поиск и замена
    End With
    N = ActiveDocument.Revisions.Count / 2 ' 1 замена = 1 удаление + 1 вставка
    MsgBox "Замен: " & CStr(N)
    ActiveDocument.TrackRevisions = False ' отключаем
    
End Sub

С поиском и заменой всего должно быстрее работать. После подсчёта меняем абракадабру обратно на аббревиатуру.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

4

Re: Автоматизация создания списка сокращений

Нужен подходящий словарь - это главное! Надо искать именно отдельно стоящий текст, а это обычным поиском Word проблематично, касательно аббревиатур. Придется или править словарь под поиск Word, или делать контроль макросом. Нюансов много.

Я написал уже несколько таких макросов, в разных вариациях. Махну макрос ПоЗа на хороший словарь сокращений. Там уже встроены и выборка со статистикой, и поддержка словарей.

Если собрались делать макрос для общего пользования, то начинать надо тоже с выкладывания словаря smile

Макросы под заказ и готовый пакет - mtdmacro.ru

5

Re: Автоматизация создания списка сокращений

Вождь пишет:

Нужен подходящий словарь - это главное! Надо искать именно отдельно стоящий текст, а это обычным поиском Word проблематично, касательно аббревиатур. Придется или править словарь под поиск Word, или делать контроль макросом. Нюансов много.

Я написал уже несколько таких макросов, в разных вариациях. Махну макрос ПоЗа на хороший словарь сокращений. Там уже встроены и выборка со статистикой, и поддержка словарей.

Если собрались делать макрос для общего пользования, то начинать надо тоже с выкладывания словаря smile

Хитрый какой)

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871