powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выделение текста до найденного слова (в Word`e)
19 сообщений из 19, страница 1 из 1
Выделение текста до найденного слова (в Word`e)
    #33609746
Витр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не соображу, как это сделать. Мне нужно выделить кусок текста от одного известного слова "Параграф 1", например, до другого - "Параграф 2". "Параграф 1" легко находится штатным вордовским поиском, а как дальше? Это надо цикл делать что ли? Или If then? Или Case?
Может кто-то делал похожий макрос? Хотя бы фрагмент макроса с таким поиском покажите. Пожалуйста!
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33609798
Витр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот что-то подобное мне надо.

Do Until "Параграф 2"
Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
Loop

Только я не знаю какую команду надо поставить вместо "Параграф 2". Мне нужно, чтобы как только макрос натыкается на такую строчку он бы прекращал цикл.
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33609964
Ничего подобного не делал, но сделать никогда не поздно. :)

Код: plaintext
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.
Sub FindWords( _
  ByRef strWord1 As String, _
  ByRef strWord2 As String)
    Dim rng As Range
    Static rngTemp As Range
    
    Set rng = ActiveDocument.Content
        
    With rng.Find
        .ClearFormatting
        .Text = strWord1
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWholeWord = True
        .MatchCase = False
        .Execute
        If .Found = True Then
            If rngTemp Is Nothing Then
                Set rngTemp = rng
                FindWords strWord2, strWord1
            Else
                rng.SetRange rngTemp.Start, rng.End
                rng.Select
                Set rngTemp = Nothing
            End If
        End If
    End With
End Sub

Вызываеш так:

Код: plaintext
FindWords "Параграф1", "Параграф2"
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33624616
Витр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что значит "вызываешь так"? Надо эту команду где-то набрать?
Если просто макрос запускаю - ошибку выдает
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33625338
Конечно ошибка, т.к. для запуска процедуру нужно указать требуемые аргументы. Сделай еще одну процедуру для вызова и запускай ее, например:

Код: plaintext
1.
2.
Sub Start()
    FindWords "Параграф1", "Параграф2"
End Sub
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33625911
Витр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит надо сделать еще один макрос, чтобы запустить первый макрос?
Я так сделал, но все равно ничего не получается.
Разве нельзя задать искомое слово в теле макроса?
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33626281
Приложи свой докумет, где у тебя не получилось.
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33627170
Витр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я набил первый попавшийся текст, вставил "Параграф1", "Параграф2" и запустил. Мне проверить надо было.
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33658998
bim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой какая замечательная тема!
как раз то, что мне нужно! работает - замечательно, за исключением одного: когда находит слово "параграф 2", то его тоже выделяет. а лучше бы, чтобы не выделял (останавливался на предыдущем слове) или выделял тогда уже весь параграф, а не только начальное слово.
это как-то возможно подправить, если не сложно?
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33659025
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исправь:

Код: plaintext
1.
2.
3.
    Else
        rng.SetRange rngTemp.Start, rng.End
        ' ...
    End If

На rng.Start:

Код: plaintext
1.
2.
3.
    Else
        rng.SetRange rngTemp.Start, rng.Start
        ' ...
    End If
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33659049
bim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо большое! помогло!
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33744106
ruIs2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое! и мне очень помог этот код... но подскажите пожалуста, как эту функцию зациклить, чтобы нашлись все фразы, выделенные в особые метки "Параграф 1", "Параграф 2" и например выделить их все жирным шрифтом.
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33744391
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сегодня нашел способ сделать более красиво. Изначально, задумка была основана на рекурсивной процедуре, новая же основана на возможности использования специальных символов в критерии поиска.

Вот новый вариант для темы Витра.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public Sub SelectBetween2Words( _
  ByRef strWord1 As String, _
  ByRef strWord2 As String)
    Dim rng As Range
    
    Set rng = ActiveDocument.Content
        
    With rng.Find
        .ClearFormatting
        .Text = "<(" & strWord1 & ")>*<(" & strWord2 & ")>"
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWholeWord = True
        .MatchCase = False
        .MatchWildcards = True
        .Execute
        
        If .Found = True Then
            rng.Select
        End If
    End With
End Sub

ruIs2, вот соответсвенно вариант для поиска всех вхождений.

Код: plaintext
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.
Public Sub SelectBetween2Words2( _
  ByRef strWord1 As String, _
  ByRef strWord2 As String)
    Dim rng As Range
    Dim rngTemp As Range
    
    Set rng = ActiveDocument.Content
        
    With rng.Find
        .ClearFormatting
        
        Do While .Execute( _
          FindText:="<(" & strWord1 & ")>*<(" & strWord2 & ")>", _
          Forward:=True, _
          MatchWildcards:=True) = True
            
            ' Выделить жирным, включая метки, заданные
            ' параметрами strWord1 и strWord2.
            ' rng.Font.Bold = True
            
            ' Выделить жирным текст, между метками, заданными
            ' параметрами strWord1 и strWord2.
            Set rngTemp = ActiveDocument.Range( _
              rng.Start + Len(strWord1), _
              rng.End - Len(strWord2))
            rngTemp.Font.Bold = True
        Loop
    End With
End Sub
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33744599
ruIs2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ashton спасибо Вам за помощь!
однако данный макрос у меня почему- то ничего не выделяет...

активируя процедуру SelectBetween2Words2 процедурой Start макрос выполняется, но выражение между метками "<b>" и "</b>" жирным не выделяет. Очень хотелось бы что бы выделял :) Еще раз огромное спасибо!


Sub Start()
SelectBetween2Words2 "<b>", "</b>"
End Sub

Sub SelectBetween2Words2( _
ByRef strWord1 As String, _
ByRef strWord2 As String)
Dim rng As Range
Dim rngTemp As Range

Set rng = ActiveDocument.Content

With rng.Find
.ClearFormatting

Do While .Execute( _
FindText:="<(" & strWord1 & ")>*<(" & strWord2 & ")>", _
Forward:=True, _
MatchWildcards:=True) = True

' Выделить жирным, включая метки, заданные
' параметрами strWord1 и strWord2.
' rng.Font.Bold = True

' Выделить жирным текст, между метками, заданными
' параметрами strWord1 и strWord2.
Set rngTemp = ActiveDocument.Range( _
rng.Start + Len(strWord1), _
rng.End - Len(strWord2))
rngTemp.Font.Bold = True
Loop
End With
End Sub
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33744720
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прикрепи к сообщению документ с примером текста и скажи какая у тебя версия Word.
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33744893
ruIs2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
текст из ворда:

<b>Проверка 1</b> текст текст текст

просто текст

<b>Проверка 2 Проверка 2</b> текст текст текст


версия ворда:

Word 2002 (10.4219.4219) SP-2
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33745058
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема связана с тем, что подстановачные знаки совпадают с скобками, обрамляющими теги.

Строки

Код: plaintext
1.
2.
3.
4.
5.
6.
    FindText:="<(" & strWord1 & ")>*<(" & strWord2 & ")>", _

    ...

    Set rngTemp = ActiveDocument.Range( _
      rng.Start + Len(strWord1), _
      rng.End - Len(strWord2))

препиши

Код: plaintext
1.
2.
3.
4.
5.
6.
    FindText:="(" & strWord1 & ")*(" & strWord2 & ")", _

    ...

    Set rngTemp = ActiveDocument.Range( _
      rng.Start + Len(strWord1) -  2 , _
      rng.End - Len(strWord2) +  2 )

И запускай так:

Код: plaintext
SelectBetween2Words2 "\<b\>", "\</b\>"
...
Рейтинг: 0 / 0
Выделение текста до найденного слова (в Word`e)
    #33745162
ruIs2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо, все работает!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Выделение текста до найденного слова (в Word`e)
    #38374353
пригодилась тема... спасибо
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выделение текста до найденного слова (в Word`e)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]