1

Тема: Выделить текст, имеющий такой же формат

Подскажите, как программно реализуется команда Выделить текст, имеющий такой же формат контекстного меню Стили в Ворде 2007?
С уважением

2

Re: Выделить текст, имеющий такой же формат

Application.Run MacroName:="SelectSimilarFormatting"
Макросы под заказ и готовый пакет - mtdmacro.ru

3

Re: Выделить текст, имеющий такой же формат

Спасибо. Я так понял это внутренний макрос приложения? Подскажите тогда еще по данному вопросу: каков состав этих макросов в приложении; где можно их просмотреть; и существует ли возможность просмотреть структуру самого макроса?

4

Re: Выделить текст, имеющий такой же формат

Насколько я знаю, внутренние команды Word не имеют отношения Visual Basic, и для многих команд аналог на Visual Basic написать невозможно.

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

5

Re: Выделить текст, имеющий такой же формат

Хорошо, а список-то данных макросов где можно посмотреть (в связке с выполняемыми командами)?

6

Re: Выделить текст, имеющий такой же формат

MS Word > Alt+F8 > в списке "Макросы из" выбираем  "Команды Word" > выбираем команду и читаем "Описание"

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

7

Re: Выделить текст, имеющий такой же формат

Спасибо, все понятно.

8

Re: Выделить текст, имеющий такой же формат

Приветствую.

Возник такой вопрос.
Если у меня есть разношерстный текст.
Возможно ли получить массив этих самых строк, с нужным мне стилем.
Алгоритм
1)Мы пробегаем по всему документу ищем нужный нам стиль
2)получаем начальную и конечную позиции символа начала и конца стиля
3)переходим к другой точке нахождения стиля.
все эти данные пишем в массив.

Буду очень признателен за ответ.

9

Re: Выделить текст, имеющий такой же формат

Kreol2013 пишет:

...Возник такой вопрос...

Public Sub Стилизованные_фрагменты_в_главной_части_документа()

Const c_StyleName$ = "Заголовок 1" ' искомый стить

Dim R As Word.Range
Dim COL As New Collection

    ' готовим поиск стиля
    Set R = ActiveDocument.Range(0, 0)
    With R.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = Word.wdFindStop
        .Format = True
        .Style = c_StyleName
    End With
    ' цикл поиска
    Do
        ' ищем
        R.Find.Execute
        If R.Find.Found <> True Then Exit Do
        ' запоминаем найденный фрагмент
        COL.Add Item:=R.Duplicate
        
        ' обработка 1
        'With R.Duplicate
        ' ............................
        'End With
        
        ' ищем далее
        If R.End >= R.StoryLength - 1 Then Exit Do
        R.Collapse Direction:=Word.wdCollapseEnd
    Loop
    
    ' обработка 2
    'For Each R In COL
    ' ............................
    'Next R
    
    ' освобождаем
    Set COL = Nothing
    
End Sub
Макросы под заказ и готовый пакет - mtdmacro.ru

10

Re: Выделить текст, имеющий такой же формат

Да действительно работает.
Спасибо огромное.
Пришлось немного поколдовать, но разобрался.
Но если у нас при конвертации текста ниже (при этом мы выбираем только транслит)
क्क, kka, क्ख, kkha, क्च, kca, १क्त, 1kta, २क्त 2kta क्त्व, ktva, क्म, kma, क्य, kya, क्र, kra, क्श, kça, क्श्म, kçma, क्श्य, kçya, ख्य
предвещает смещение сконвертированого текста влево, то есть то, что мы и имеем क्क, kka,
Изначально было просто kka, => क्क, kka, так вот как тогда быть?. Я дописал   

Dim i, temp  As Integer
    i = 0
    For Each R In COL
    i = i + 1
    If (i = 1) Then
        ActiveDocument.Range(Start:=COL.Item(i).Start, End:=COL.Item(i).End).Select
    Else
        temp = temp + Len(COL.Item(i - 1))
        ActiveDocument.Range(Start:=COL.Item(i).Start + temp, End:=COL.Item(i).End + temp).Select
    End If
        Call Trans_2_Dev_Multistring_F5

но тут же столкнулся с проблемой, если у меня помещаемый в итем текст имеет пробел вначале, моя функция конвертинга If VBA.Len(arrText(i)) <= 0 Then Exit Sub вылетает. И меня вполне устраивает это.
А как сделать чтоб в итем не попадал пробел вначале?
Попытка удалить его перед помещением в итем ведет к тому, что этот пробел удаляется в документе.

If R.Find.Found <> True Then Exit Do
        If Left(R.Duplicate, 1) = " " Then
        R.Duplicate.Text = Right(R.Duplicate.Text, Len(R.Duplicate.Text) - 1)
        End If

Может и несу бред. Запутался я что-то.

11

Re: Выделить текст, имеющий такой же формат

Kreol2013 пишет:

...Запутался...

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

Тяжело собрать что-то из кусков непонятно чего. Так же, как и советовать, не зная задачи.

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

12

Re: Выделить текст, имеющий такой же формат

Вот попробовал описать проблему визуально.
Когда мы производим поиск по тексту
क्क, kka, क्ख, kkha,
мы находим kka, выделяем его и производим конвертацию.
После конвертации конвертер вставит текст слева от выделения. Дальше нам нужно перейти к следующему слову kkha, но так как я не знаю как получить координаты следующего слова, я на него не могу перейти.
внешняя ссылка
Пользоваться поиском по словам не представляется возможным,  так как могут быть повторы.
Есть ли способ перейти к следующему слову и выделить его?

13

Re: Выделить текст, имеющий такой же формат

ссылка на youtube

14

Re: Выделить текст, имеющий такой же формат

Вождь пишет:
Application.Run MacroName:="SelectSimilarFormatting"

В прилагаемом файле 2-я и 4-я строки имеют форматирование "Все прописные". Мне нужно преобразовать эти строки из строчных букв с указанным форматированием в прописные без форматирования.
Я ставлю курсор на 2-ю строку и выполняю следующий макрос:

Sub Macro1()
    Application.Run MacroName:="SelectSimilarFormatting"
    Selection.Range.Case = wdNextCase
    Selection.Range.Case = wdNextCase
    Selection.Range.Case = wdNextCase
    Selection.MoveRight Unit:=wdCharacter, Count:=1
End Sub

Обе строки выделяются, но изменение регистра производится только для 4-й строки!

Post's attachments

Пример1.docx 11.16 Кб, 2 скачиваний с 2015-03-12 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

15

Re: Выделить текст, имеющий такой же формат

Selection.Range - это последний из выбранных фрагментов.
Команды есть для всех кнопок интерфейса Word, в том числе для смены регистра букв:

Application.Run MacroName:="SelectSimilarFormatting"
Application.Run MacroName:="ChangeCase"

Список всех команд:
внешняя ссылка

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

16

Re: Выделить текст, имеющий такой же формат

Вождь пишет:

Selection.Range - это последний из выбранных фрагментов.
Команды есть для всех кнопок интерфейса Word, в том числе для смены регистра букв:

Application.Run MacroName:="SelectSimilarFormatting"
Application.Run MacroName:="ChangeCase"

Список всех команд:
внешняя ссылка

Спасибо. Но после первого применения данного макроса выделение снимается, как и форматирование.
Можно ли сделать, чтобы обе строки преобразовались в состояние wdUpperCase?
Можно ли запустить команду Application.Run MacroName:="ChangeCase" с параметром wdUpperCase?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

17

Re: Выделить текст, имеющий такой же формат

Нет, только по кругу.

Придется загнать поиск в цыкл и работать с Range.

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

18

Re: Выделить текст, имеющий такой же формат

Можно поизвращатся с Selection, используя какую-либо метку. Например цвет:

Application.Run MacroName:="SelectSimilarFormatting"
Selection.Font.Color = 1
Application.Run MacroName:="ChangeCase"
Application.Run MacroName:="SelectSimilarFormatting"
Application.Run MacroName:="ChangeCase"
Application.Run MacroName:="SelectSimilarFormatting"
Selection.Font.ColorIndex = wdAuto

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

19

Re: Выделить текст, имеющий такой же формат

Вождь пишет:

Можно поизвращатся с Selection, используя какую-либо метку. Например цвет:

Application.Run MacroName:="SelectSimilarFormatting"
Selection.Font.Color = 1
Application.Run MacroName:="ChangeCase"
Application.Run MacroName:="SelectSimilarFormatting"
Application.Run MacroName:="ChangeCase"
Application.Run MacroName:="SelectSimilarFormatting"
Selection.Font.ColorIndex = wdAuto

Добавить еще одну пару операторов - и все отлично работает!

Еще для справки: во что мы здесь покрасили строки оператором Selection.Font.Color = 1? Это черный цвет?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.