Макросы поиск текста word

Цитата
Сообщение от Lupus
Посмотреть сообщение

что за объект такой Content и чем он отличается от Range ?

Вообще документ состоит из нескольких частей (я все не могу вспомнить):

  1. колонтитулы,
  2. сноски,
  3. надписи,
  4. собственно документ.

Content — это и есть собственно документ.

Что касается Range, то надо различать:

  1. свойство Range;
  2. метод Range.

Метод Range есть только у объекта Document (Activedocument) и Shapes (про Shapes не знаю, ни разу не использовал). С помощью метода можно задавать определённый диапазон, например:

Visual Basic
1
Activedocument.Range(Start:=0, End:=10)

что означает диапазон документа от начала и до десятого знака включительно. Если ничего не указано:

Visual Basic
1
Activedocument.Range

то означает — весь документ. Т.е. в данном случае Range, то же самое, что Content (хотя может разница и есть в чём-то).

В остальных случаях (когда Range не относится к Documents (Activedocument), Range является свойством и с помощью него узнают

порядковый номер символа

(но там путаница большая, если используются в документе кроме символов другие объекты (например, рисунки)) и

содержимое объекта

(например, абзаца):

Visual Basic
1
2
3
4
Sub P3()
'Определение номера символа, когда начинается абзац.
MsgBox ActiveDocument.Paragraphs(1).Range.Start
End Sub
Visual Basic
1
2
3
4
Sub P4()
'Получаем содержимое абзаца.
MsgBox ActiveDocument.Paragraphs(1).Range
End Sub

ВикиЧтение

VBA для чайников
Каммингс Стив

Поиск и замена текста с помощью VBA в Word

Хотя это звучит и несколько необычно, но Find — это объект Word VBA. Объекты Find принадлежат диапазонам и выделенным областям. Для обнаружения или форматирования текста с помощью объекта Find вам потребуется выполнить следующие действия.

1. Получите доступ к объекту Find для определенного диапазона или выделенной области. Если вам необходимо просмотреть целый документ, используйте свойство Content объекта Document для получения доступа к соответствующему диапазону, как показано ниже:

ActiveDocument.Content.Find

2. Определить свойства объекта Find в соответствии с тем, что же вы ищете и как именно вы хотите проводить поиск.

3. Вызвать метод Execute объекта Find. Соответствующий пример приведен ниже:

With OpenRange.Find

.Clear Formatting

.Text = «pogosticks»

.Execute

End With

Для свойств, значения которых явно вы задать не можете, объект Find выбирает параметры, использованные последними или те, которые в настоящий момент заданы в диалоговом окне Найти и заменить программы Word. Именно по этой причине вам всегда следует включать метод Clear Formatting перед началом нового поиска- он позволяет убрать все ранее определенные для проведения поиска параметры форматирования.

Работа с найденным текстом

Основная работа метода Execute — обнаружение первого экземпляра искомого текста или форматирования в указанном диапазоне или выделенной области. После выполнения этого метода вам прежде всего следует определить, было ли найдено то, что вы ищете. Для подобной проверки используйте свойство Found объекта Find совместно с инструкцией If…Then, как показано на примере следующей заготовки программного кода:

If .Found = True Then

(выполнение определенных действий с найденным текстом)

Else

(отображение соответствующего сообщения)

End If

Если метол Execute нашел необходимый текст, исходный диапазон или выделенная область переопределяются таким образом, чтобы содержать найденный текст. Это очень важный момент, поскольку это означает, что вы можете работать с найденным текстом посредством свойств и методов исходного объекта. В следующем примере, представляющем собой расширенный вариант первого фрагмента кода из настоящего раздела, инструкция .Parent. Italic = True обращается к родительскому объекту по отношению к объекту Find, т.е. диапазону OpenRange. При выполнении этой инструкции диапазон OpenRange теперь содержит только найденный фрагмент текста, так как только в нем предусмотрено форматирование курсивом:

With OpenRange.Find

.СlearFormatting

.Text = «pogosticks»

If .Found = True Then

.Parent.Italic = True

Else

MsgBox «No pogosticks found.»

End If

End with

Объект Reolacement принадлежит (а значит, является его свойством) объекту Find. При написании кода для операции поиска и замены вам следует задать свойства и выполнить методы объекта Replacement.

Следующий фрагмент кода заменяет все экземпляры фразы pogosticks словом skateboards. Выделенная область изменяется при выполнении критерия поиска, поскольку доступ к объекту Find осуществляется через объект Selection:

With ActiveDocument.Content.Find

.ClearFormatting

.Text = «pogosticks»

With .Replacement

.ClearFormatting

.Text == «skateboards»

End With

.Execute Replace := wdReplaceAll

End With

Обратите внимание на то, что метод Execute может использовать аргумент Replace, предназначенный для контроля за тем, будут ли заменены все обнаруженные экземпляры обнаруженного фрагмента текста, или только первый.

Читайте также

Поиск и замена данных

Поиск и замена данных
В программе HtmlPad реализована возможность быстрого поиска данных. Этот механизм полезно использовать при работе с большими программными кодами или с большими объемами данных, поскольку поиск требуемой информации вручную (например, путем просмотра

Поиск и замена данных

Поиск и замена данных
В программе Extra Hide Studio имеется удобный механизм для быстрого поиска и замены данных. Эта возможность особенно актуальна при работе с большими исходными кодами, поскольку поиск данных путем просмотра всего кода может занять слишком много времени, и к

Глава 2 Подготовка текста в Microsoft Word

Глава 2 Подготовка текста в Microsoft Word
• Общие сведения о Word 2007• Основные правила форматирования• Вставка стандартных блоков в документ• Нумерация страниц и колонтитулы• Проверка правописания, поиск синонимов, перевод слов• Сноски и закладки• Настройка параметров

3.1. Поиск и замена фрагментов

3.1. Поиск и замена фрагментов
Текстовый редактор успешно справляется с поиском и заменой текста в отдельном файле. Однако, если это же нужно сделать сразу в нескольких файлах, лучше воспользоваться специальными программами, с помощью которых можно заменить фрагменты

Поиск и замена текста

Поиск и замена текста
В текстовом редакторе Adobe InDesign можно воспользоваться полезнейшей функцией поиска и замены фрагментов текста. Причем, раз мы имеем дело с программой верстки, найденные фрагменты можно не только заменить другими, но и оформить каким-то образом –

Поиск и замена форматирования

Поиск и замена форматирования
Для поиска текста с определенным форматированием используйте свойства объекта Find, касающиеся форматирования. Они идентичны свойствам, используемым при работе с форматированием диапазона или выделенной области, как я уже отмечал в разделе

Автоматический поиск и замена данных

Автоматический поиск и замена данных
В процессе работы иногда возникает необходимость быстро найти те или иные данные (слово, текстовый фрагмент и т. д.) либо заменить одни данные на другие. Для решения такой задачи в Publisher 2007 реализован механизм автоматического поиска и

Поиск и замена

Поиск и замена
В новой версии Excel был полностью изменен пользовательский интерфейс и расширены функциональные возможности средства Найти и заменить. Теперь можно с помощью одной операции производить поиск и замену по всем листам книги, повторно выполнять запросы поиска

Поиск и замена символов

Поиск и замена символов
Иногда при подготовке электронных документов возникает задача поиска определенных текстовых фрагментов. Например, вы забыли номер чертежа, но помните, что в его названии или дополнительной информации, размещенной на чертеже, содержится

Глава 2 Подготовка текста в Microsoft Word

Глава 2
Подготовка текста в Microsoft Word
Microsoft Word – пожалуй, самая популярная на сегодняшний день программа, предназначенная для работы с текстами. Продукт компании Microsoft обладает всеми необходимыми возможностями, связанными с набором и правкой текстов любой сложности.

5.7. Поиск и замена

5.7. Поиск и замена
В документе можно производить автоматический поиск текста и замену его другим.Поиск и замена ведется по введенному образцу. Если в качестве образца указано слово «ход», то компьютер найдет и слово «пароход», если предварительно не поставить условие, что

13.3.4. Поиск и замена текста

13.3.4. Поиск и замена текста
Как вы уже догадались, окно Найти и заменить используется не только для перехода на нужную страницу. Вкладка Найти используется для поиска текста. Для быстрого доступа к этой вкладке нажмите Ctrl+F или выберите команду меню Правка, Найти. Нажмите

Поиск и замена

Поиск и замена
Для поиска в тексте документа нужного слова или сочетания символов служит окно поиска и замены (рис. 9.19), которое открывается нажатием Ctrl+F. Если надо, чтобы оно сразу открылось как окно замены, используйте сочетание Ctrl+H.

Рис. 9.19. Окно поиска и замены.Для

Поиск и замена фрагментов фильма

Поиск и замена фрагментов фильма
Очень часто бывает нужно найти в изображении или фильме Flash какой-либо текст и, возможно, заменить его на другой. Специально для этого Flash, как и многие другие программы, работающие с документами, предлагает богатые возможности по поиску и

Поиск и замена текста

Поиск и замена текста
Поиск определенного слова или фразы в большом документе является довольно непростой задачей, но ее можно значительно упростить, если воспользоваться командой Главная ? Редактирование ? Найти. В появившемся окне (рис. 5.20) введите искомый текст и

Поиск и замена данных

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

Поиск заданной фразы в документах Word

Sashagor1982

Дата: Суббота, 03.06.2017, 23:32 |
Сообщение № 1

Группа: Проверенные

Ранг: Обитатель

Сообщений: 275


Репутация:

-6

±

Замечаний:
0% ±


Excel 2007

Здравствуйте, подскажите, можно ли программным путем решить следующую задачу. В приложенном файле архив, в котором находится файл-пример и папка «2017 год» содержащая документы Word. Вопрос состоит с следующем, в столбце A файла примера определенные фразы и т.д., необходимо, что бы в той же строке в столбцах B, C и т.д. в результате выполнения программы значения равнялись именам файлов который содержит данную фразу (при этом таких файлов может быть много).

К сообщению приложен файл:

6226717.rar
(21.9 Kb)

 

Ответить

Michael_S

Дата: Воскресенье, 04.06.2017, 02:43 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

Замечаний:
0% ±


Excel2016

можно ли программным путем решить следующую задачу

Можно.

 

Ответить

Sashagor1982

Дата: Воскресенье, 04.06.2017, 09:35 |
Сообщение № 3

Группа: Проверенные

Ранг: Обитатель

Сообщений: 275


Репутация:

-6

±

Замечаний:
0% ±


Excel 2007

Каким образом?

 

Ответить

Michael_S

Дата: Воскресенье, 04.06.2017, 10:10 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

Замечаний:
0% ±


Excel2016

Из Excel открывать поочердно файлы Word, в каждом поиском проверять наличие нужных данных; нашли-отметили.

 

Ответить

Sashagor1982

Дата: Воскресенье, 04.06.2017, 11:35 |
Сообщение № 5

Группа: Проверенные

Ранг: Обитатель

Сообщений: 275


Репутация:

-6

±

Замечаний:
0% ±


Excel 2007

Другие варианты.

 

Ответить

Michael_S

Дата: Воскресенье, 04.06.2017, 11:51 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 2012


Репутация:

373

±

Замечаний:
0% ±


Excel2016

Другой вариант — открывать файлы Word вручную, также вручную поиском искать нужное и отмечать, если найдено.

Я бы мог сделать нужный макрос, но на это нужно потратить не менее полноценного рабочего дня. Оно мне надо?
…может найдется кто, кому это интересно ради саморазвития…

Сообщение отредактировал Michael_SВоскресенье, 04.06.2017, 11:53

 

Ответить

Pelena

Дата: Воскресенье, 04.06.2017, 12:24 |
Сообщение № 7

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Michael_S, при всём моём уважении, зачем было заводить этот разговор, если помогать не собирались?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

VSerg

Дата: Воскресенье, 04.06.2017, 14:08 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

2

±

Замечаний:
0% ±


Excel 2013

Попробовал ради саморазвития. Уверен что можно упростить и оптимизировать, но так скажем, для начала, можно попробовать так:

И еще, я немного переформатировал ваш пример, добавив пробел, как разделитель между словами, иначе не знаю как использовать функцию Split. Возможно, нужно искать символ новой строки.

К сообщению приложен файл:

6226717.zip
(37.9 Kb)

Сообщение отредактировал VSergВоскресенье, 04.06.2017, 14:28

 

Ответить

Sashagor1982

Дата: Воскресенье, 04.06.2017, 15:00 |
Сообщение № 9

Группа: Проверенные

Ранг: Обитатель

Сообщений: 275


Репутация:

-6

±

Замечаний:
0% ±


Excel 2007

VSerg, выдает ошибку на строке:
[vba]

Код

Dim objWord As Word.Application

[/vba]

 

Ответить

Sashagor1982

Дата: Воскресенье, 04.06.2017, 15:08 |
Сообщение № 10

Группа: Проверенные

Ранг: Обитатель

Сообщений: 275


Репутация:

-6

±

Замечаний:
0% ±


Excel 2007

Я так же переработал пример, в документе Word эти слова будут разделены запятой.

К сообщению приложен файл:

4420224.rar
(23.3 Kb)

 

Ответить

VSerg

Дата: Воскресенье, 04.06.2017, 15:14 |
Сообщение № 11

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

2

±

Замечаний:
0% ±


Excel 2013


Лучше конечно указывать какую ошибку. Но рискну предположить, что нет ссылки на Microsoft Word Object Library. Нужно зайти в меню Инструменты => ссылки и установить галочку.
Если разделитель запятая, то попробуйте изменить строку[vba]

Код

s = Split(.Range.Text, «,»)

[/vba]

 

Ответить

buchlotnik

Дата: Воскресенье, 04.06.2017, 16:00 |
Сообщение № 12

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

VSerg, я думаю, что проблема состоит в том, что у вас 2013, а у ТС — 2007. У Экселя есть проблема обратной совместимости и ваш файл пытается найти у Sashagor1982 библиотеку 2013 Word, которой просто нет. Поскольку вы всё равно используете позднее связывание в области имён достаточно переписать [vba]

Код

Dim objWord As Object
Dim wrdDoc As Object

[/vba] и тогда ссылка на библиотеку вовсе не нужна

Сообщение отредактировал buchlotnikВоскресенье, 04.06.2017, 18:08

 

Ответить

Sashagor1982

Дата: Воскресенье, 04.06.2017, 19:52 |
Сообщение № 13

Группа: Проверенные

Ранг: Обитатель

Сообщений: 275


Репутация:

-6

±

Замечаний:
0% ±


Excel 2007

VSerg, buchlotnik, Спасибо, чуть доработал код, программа в принципе рабочая. Однако, есть ли другие варианты решения задачи? В этом варианте программа разбивает файлы на слова и каждое проверяет что при большом количестве файлов и данных в файлах очень долго, а достаточно просто знать содержит ли Word-файл данное значение или нет.

К сообщению приложен файл:

0674271.rar
(26.3 Kb)

 

Ответить

RAN

Дата: Воскресенье, 04.06.2017, 20:12 |
Сообщение № 14

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Писать с нуля и тестировать было лениво.
[vba]

Код

Sub SearchInMSWord()
    Dim FSO As Object
    Dim SourceFolder As Object
    Dim FileItem As Object
    Dim objWord As Object
    Dim wrdDoc As Object
    Dim i As Long
    Dim lLastRow As Long
    Dim myRange As Object

    lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Set FSO = CreateObject(«Scripting.FileSystemObject»)
    Set SourceFolder = FSO.getfolder(ThisWorkbook.Path & «/2017 год»)
    Set objWord = CreateObject(«Word.Application»)

    For Each FileItem In SourceFolder.Files
        Set wrdDoc = objWord.Documents.Open(FileItem.Path, , True)
        For i = 1 To lLastRow
            Set myRange = wrdDoc.Content
            myRange.Find.Execute Cells(i, 1).Value, , , , , , True
            If myRange.Find.Found Then Cells(i, Columns.Count).End(xlToLeft).Next = wrdDoc.Name
            Set myRange = Nothing
        Next
        wrdDoc.Close
    Next
    objWord.Quit
    Set wrdDoc = Nothing: Set objWord = Nothing: Set SourceFolder = Nothing: Set FSO = Nothing
End Sub

[/vba]
Протестировал, поправил


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANВоскресенье, 04.06.2017, 20:52

 

Ответить

Sashagor1982

Дата: Понедельник, 05.06.2017, 13:23 |
Сообщение № 15

Группа: Проверенные

Ранг: Обитатель

Сообщений: 275


Репутация:

-6

±

Замечаний:
0% ±


Excel 2007

[vba]

Код

Set wrdDoc = objWord.Documents.Open(FileItem.Path, , True)

[/vba]
На данной строке выдает ошибку Файл поврежден.

Сообщение отредактировал Sashagor1982Вторник, 06.06.2017, 10:43

 

Ответить

Sashagor1982

Дата: Вторник, 06.06.2017, 10:44 |
Сообщение № 16

Группа: Проверенные

Ранг: Обитатель

Сообщений: 275


Репутация:

-6

±

Замечаний:
0% ±


Excel 2007

Программа видит скрытые файлы в этом и была проблема. Спасибо, задача решена.

 

Ответить

Leprotto

Дата: Пятница, 23.06.2017, 12:04 |
Сообщение № 17

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 139


Репутация:

1

±

Замечаний:
0% ±


Excel 2016

Всем привет!
А можно сделать то же самое, только чтобы поиск значения осуществлялся в конкретном месте файла ворд?
Например в таблице или пометить нужное место стилем «Заголовок/подзаголовок» ;)
Вышеизложенное решение уж больно долго работает в больших документах :(

 

Ответить

AndreTM

Дата: Пятница, 23.06.2017, 12:23 |
Сообщение № 18

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Можно.
И чтобы не менять оформление документов — пометьте нужные куски закладками, а затем вместо всего wrdDoc.Content ищите по коллекции wrdDoc.Bookmarks (Bookmarks(i).Range.Text -содержимое закладки).


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

Leprotto

Дата: Понедельник, 26.06.2017, 12:50 |
Сообщение № 19

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 139


Репутация:

1

±

Замечаний:
0% ±


Excel 2016

AndreTM, СУПЕР, СПАСИБО!
Правда сначала помечал закладкой кусок текста и выяснилось, что при корректировке этого текста объем закладки меняется.
Поместил нужное в таблицу и пометил закладкой всю ячейку. Работает отлично :D

 

Ответить

Sub Выделить_между()
    Dim MyRange As Range, rStart&, rEnd&
    Set MyRange = ActiveDocument.Content
    With MyRange
        With .Find
            .ClearFormatting
            .Text = "Структура активов"
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
            If .Found Then rStart = MyRange.End: rEnd = rStart
        End With
    End With
    Set MyRange = ActiveDocument.Content
    With MyRange
        With .Find
            .Text = "Внеоборотные активы"
            .Execute
            If .Found Then rEnd = MyRange.Start
        End With
    End With
    If rEnd > rStart Then
        ActiveDocument.Range(rStart, rEnd).Select
        Selection.Copy
    End If
End Sub
 
Sub Выделить_между2()
Dim r
Set r = ActiveDocument.Range
With r.Find
    .ClearFormatting
    .Text = "Структура активов*Внеоборотные активы"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
    If .Execute Then
        ActiveDocument.Range(r.Start + 4, r.End - 4).Select
        Selection.Copy
    Else
        MsgBox "Текст не найден!", vbExclamation
    End If
End With
End Sub
Sub Макрос1()
'
' Макрос1 Макрос
 
For Each dd In ActiveDocument.Tables
    asq = asq + 1
    dd.Name
Next
 
End Sub

Валерий спрашивает:

Как из текста в Word 2007 выбрать все слова на определенную букву, расположить их в алфавитном порядке и сохранить их в отдельном файле?

Валерий, вот пример макроса для ваших целей, подсказанный Александром Витером.

Sub startWordsChar2()
'Поиск слов, начинающихся с определенной буквы и перенос их в
'отсортированный по алфавиту список в новый документ
Dim bukva As String
Dim newDoc As Document
Dim actDoc As Document
Dim oPar As Paragraph
Dim rng As Range
Set actDoc = ActiveDocument
Set rng = actDoc.Range
Do
  bukva = InputBox("Введите начальную букву слова в поле:", "Поиск слов")
  If StrPtr(bukva) = 0 Then
     Exit Sub
  ElseIf Len(bukva) = 0 Then
     MsgBox "Введите пожалуйста начальную букву " & vbCr & "или нажмите кнопку 'Cancel"
  End If
Loop Until Len(bukva) <> 0
Application.ScreenUpdating = False
Set newDoc = Documents.Add
'Ищем слово, начинающееся с указанной буквы в любом регистре
With actDoc.Range.Find
  .Text = "<[" & StrConv(bukva & bukva, vbProperCase) & "][А-Яа-яЁё]@>"
  .MatchWildcards = True
  While .Execute
    Application.StatusBar = "Добавляем " & bukva
    newDoc.Range.InsertAfter Trim(.Parent.Text)
    newDoc.Range.InsertParagraphAfter
  Wend
End With
'Сортируем содержимое нового документа
newDoc.Range.Sort , "Paragraphs", wdSortFieldAlphanumeric, wdSortOrderAscending
'Удаляем первый пустой абзац
newDoc.Paragraphs(1).Range.Delete
'Поскольку в каждом абзаце находится по одному слову, то нужно только перебирать абзацы и удалять _
все слова, которые содержатся в текущем
For Each oPar In newDoc.Paragraphs
  If oPar.Range.End <> newDoc.Range.End Then
    With newDoc.Range(oPar.Range.End, newDoc.Range.End).Find
      .Text = oPar.Range.Text
      .Replacement.Text = ""
      .Execute Replace:=wdReplaceAll
    End With
  End If
Next
Application.ScreenUpdating = True
End Sub

Если вы не знаете, как подключить к документу и применить эти макросы, изучите следующие заметки с сайта:

Создание макроса из готового кода

Автоматическая запись макроса

Dim d As Long, ePos&
    d = 0
    ePos = Selection.End
    'поиск в содержимом выделенного текста
    With Selection.Range.Duplicate.Find
        .Text = "${*}"
        'эта опция отвечает за поиск с использованием подстановочных знаков
        'не работает когда установлено в положение False, или её нет вообще
        'если установлена в положение True, тогда работает
        .MatchWildcards = True
        Do While .Execute
            If .Parent.End > ePos Then Exit Do
            'wdBrightGreen - ярко-зеленый = 4
            'wdwdYellow - желтый = 7
            .Parent.HighlightColorIndex = 7
            d = d + 1
        Loop
    End With

Понравилась статья? Поделить с друзьями:
  • Макросы поиск для word
  • Максимальная высота строки в excel как увеличить
  • Макросы обращение к excel ячейками
  • Максимальная высота столбца в excel
  • Макросы не сохраняются в word