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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2009, 15:05   #1
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
Восклицание Выделение цветом абзацов с одинаковыми числовыми значениями в тексте в Word'e

В общем имеется огромный список предприятий и краткая их характеристика... необходимо выделить цветом те абзацы в которых имеются одинаковые их коды (числовые значения) для визуального обнаружения повторного ввода... ну что-то на типа условного форматирования в Excel'e...

Заранее спасибо за помощь...

Пример ниже во вложении...
Вложения
Тип файла: doc список.doc (28.5 Кб, 34 просмотров)
xamillion вне форума Ответить с цитированием
Старый 01.11.2009, 15:41   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

А не лучше ли просто эти абзацы отсортировать?
Sasha_Smirnov вне форума Ответить с цитированием
Старый 01.11.2009, 15:52   #3
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
А не лучше ли просто эти абзацы отсортировать?
Текст неоднообразный, непоследовательный. Единственное что соблюдается так это один абзац на предприятие...
xamillion вне форума Ответить с цитированием
Старый 01.11.2009, 16:01   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Так вот я и пишу, увидев, что каждый код — в своём абзаце.

В 97-м ворде (в виде Структура) есть команда Сортировать абзацы, и она прекрасно работает.

А вот в 2007-м что-то не нахожу такую. Сортировка абзацев:
Код:
Sub Макрос1()
Selection.Sort
End Sub
А в принципе я вашу задачу решил: вставил в Excel, затем: меню Данные, а в нём сортировка.

Цитата:
Сообщение от xamillion Посмотреть сообщение
Еще раз повторюсь - текст неоднообразный и непоследовательный (пример упростил), да и абзацев уж очень много для визуального сравнения. Сортировка тут не поможет...
А когда вы таки раскрасите те 400 строк (макросом Алекса), то что же — будете их выискивать перемоткой туда-сюда?

Допустим, что повторы нужно удалить. И когда они идут подряд — это удобно.

(Кстати, в следующей теме речь как раз об удалении повторов.)

Я вообще-то имел в виду сортировку по кодам, а не по алфавиту. Просто здесь это случайно совпало.

Последний раз редактировалось Sasha_Smirnov; 02.11.2009 в 11:30. Причина: добавка насчёт нижеследующих постов.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 01.11.2009, 18:41   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Выдели число, абзац с которым нужно найти, и запусти макрос
Код:
Sub HighlightPars()
  Dim sNumber As String
  
  sNumber = Selection.Text
  With ActiveDocument.Range.Find
    .Text = sNumber
    While .Execute
      .Parent.Paragraphs.Last.Range.HighlightColorIndex = wdYellow
    Wend
  End With
  
End Sub
Sasha_Smirnov, а вторая кнопка в правом верхнем углу группы «Абзац» на вкладке «Главная» не то же самое делает?
Вот эта:
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 01.11.2009 в 19:10.
viter.alex вне форума Ответить с цитированием
Старый 01.11.2009, 21:40   #6
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Так вот я и пишу, увидев, что каждый код — в своём абзаце.

В 97-м ворде (в виде Структура) есть команда Сортировать абзацы, и она прекрасно работает.
...
А в принципе я вашу задачу решил: вставил в Excel, затем: меню Данные, а в нём сортировка ... .
Еще раз повторюсь - текст неоднообразный и непоследовательный (пример упростил), да и абзацев уж очень много для визуального сравнения. Сортировка тут не поможет...

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Выдели число, абзац с которым нужно найти, и запусти макроc...
Да если бы все так просто было бы, я бы эти 4 000 предприятий вручную через Ctr+F нашел бы...

Нужно чтобы подсветились все абзацы где всречаются повторяющиеся коды без моего вмешательства (одним цветом хорошо, разными вообще прекрасно)...

Последний раз редактировалось xamillion; 01.11.2009 в 21:47.
xamillion вне форума Ответить с цитированием
Старый 02.11.2009, 00:15   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от xamillion Посмотреть сообщение
…Нужно чтобы подсветились все абзацы где всречаются повторяющиеся коды без моего вмешательства (одним цветом хорошо, разными вообще прекрасно)...
Не знаю, зачем это нужно, но это совсем не сложно. Зачем выделять-то?
Код:
Sub HighlightPars()

  Dim iStart As Long 'Верхняя граница диапазона поиска
  Dim oCurrDoc As Document 'Рабочий документ
  Dim nColor As Long 'Цвет выделения
  Dim sNumber As String 'Искомое число
  
  Set oCurrDoc = ActiveDocument
  With oCurrDoc.Range(iStart, oCurrDoc.Range.End).Find
    .Text = "[0-9]{8}" 'Ищем любое число из восьми цифр
    .MatchWildcards = True 'Подстановочные знаки
    .Font.Shading.BackgroundPatternColor = wdColorAutomatic 'Без заливки
    While .Execute
      .Parent.Select
      iStart = .Parent.End 'Конец найденного слова
      nColor = GetRandomColor 'Получаем случайный цвет
      sNumber = .Parent.Text 'Найденный текст
      'Закрашиваем абзац, в котором нашли номер
      .Parent.Paragraphs.First.Range.Font.Shading.BackgroundPatternColor = nColor
      'Запускаем еще один поиск, но уже с конкретным числом
      With oCurrDoc.Range(iStart, oCurrDoc.Range.End).Find
        .Text = sNumber
        While .Execute
          .Parent.Paragraphs.First.Range.Font.Shading.BackgroundPatternColor = nColor
        Wend
      End With
    Wend
  End With
End Sub

Function GetRandomColor() As Long
  Randomize
  Dim R As Byte
  Dim G As Byte
  Dim B As Byte
  
  R = Int(255 * Rnd) + 1
  G = Int(255 * Rnd) + 1
  B = Int(255 * Rnd) + 1
  
  GetRandomColor = RGB(R, G, B)
End Function
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 02.11.2009 в 00:22.
viter.alex вне форума Ответить с цитированием
Старый 02.11.2009, 21:17   #8
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Не знаю, зачем это нужно, но это совсем не сложно. Зачем выделять-то?
Выделять нужно чтобы не высматривать несколько раз повторно ошибочно введенные описания предприятий, а их очень много... вручную просмотреть тяжело...

ну выделять все подряд не надо... "закоментировал строку" ниже...

Код:
Sub HighlightPars()
...
    'Закрашиваем абзац, в котором нашли номер
    '.Parent.Paragraphs.First.Range.Font.Shading.BackgroundPatternColor = nColor
    'Запускаем еще один поиск, но уже с конкретным числом
...
числа теперь ищем с 7 цифр т.к. они не закрашивались - "ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "НОВЬ",3726157", например...

но при этом выделяются все дубликаты кроме первых... можно как то это исправить?
xamillion вне форума Ответить с цитированием
Старый 03.11.2009, 05:46   #9
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Я не пойму, чего нужно добиться. Если ты закомментировал эту строку, то первый абзац, в котором было найдено число закрашиваться не будет. Если строку поиска [0-9]{8} заменить на [0-9]{7;8}, то искать будет и семизначные, и восьмизначные номера
Может дубликаты нужно просто удалить?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 03.11.2009, 09:01   #10
xamillion
Форумчанин
 
Аватар для xamillion
 
Регистрация: 30.09.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Я не пойму, чего нужно добиться. Если ты закомментировал эту строку, то первый абзац, в котором было найдено число закрашиваться не будет. Если строку поиска [0-9]{8} заменить на [0-9]{7;8}, то искать будет и семизначные, и восьмизначные номера
Может дубликаты нужно просто удалить?
Если не закомментировать эту строку то выделяется все подряд!!! а нужно выделять только те абзацы где есть один и тот же код предприятия... встретился код один раз - абзац не выделяем, встретился два - выделяем оба, если больше - выделяем столько сколько одинаковых кодов.

[0-9]{7;8} - именно так и сделал...
xamillion вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Число в тексте с измененным цветом segail Microsoft Office Excel 8 09.12.2009 22:02
Выделение цветом определённых ячеек Bbalt Microsoft Office Excel 5 13.02.2009 12:07
Выделение цветом ratgunter Общие вопросы C/C++ 0 05.12.2008 23:22