Тема: Выделить текст, имеющий такой же формат
Подскажите, как программно реализуется команда Выделить текст, имеющий такой же формат контекстного меню Стили в Ворде 2007?
С уважением
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите, как программно реализуется команда Выделить текст, имеющий такой же формат контекстного меню Стили в Ворде 2007?
С уважением
Application.Run MacroName:="SelectSimilarFormatting"
Спасибо. Я так понял это внутренний макрос приложения? Подскажите тогда еще по данному вопросу: каков состав этих макросов в приложении; где можно их просмотреть; и существует ли возможность просмотреть структуру самого макроса?
Насколько я знаю, внутренние команды Word не имеют отношения Visual Basic, и для многих команд аналог на Visual Basic написать невозможно.
Хорошо, а список-то данных макросов где можно посмотреть (в связке с выполняемыми командами)?
MS Word > Alt+F8 > в списке "Макросы из" выбираем "Команды Word" > выбираем команду и читаем "Описание"
Спасибо, все понятно.
Приветствую.
Возник такой вопрос.
Если у меня есть разношерстный текст.
Возможно ли получить массив этих самых строк, с нужным мне стилем.
Алгоритм
1)Мы пробегаем по всему документу ищем нужный нам стиль
2)получаем начальную и конечную позиции символа начала и конца стиля
3)переходим к другой точке нахождения стиля.
все эти данные пишем в массив.
Буду очень признателен за ответ.
...Возник такой вопрос...
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
Да действительно работает.
Спасибо огромное.
Пришлось немного поколдовать, но разобрался.
Но если у нас при конвертации текста ниже (при этом мы выбираем только транслит)
क्क, 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
Может и несу бред. Запутался я что-то.
...Запутался...
Можно организовать урезание пробелов в моей функции, но это ошибочный подход, т.к. в найденных фрагментах может быть что угодно. Поэтому, ваша функция конвертации должна не обрезать текст, а обрабатывать только конвертируемые знаки. Ошибка в ней.
Тяжело собрать что-то из кусков непонятно чего. Так же, как и советовать, не зная задачи.
Вот попробовал описать проблему визуально.
Когда мы производим поиск по тексту
क्क, kka, क्ख, kkha,
мы находим kka, выделяем его и производим конвертацию.
После конвертации конвертер вставит текст слева от выделения. Дальше нам нужно перейти к следующему слову kkha, но так как я не знаю как получить координаты следующего слова, я на него не могу перейти.
внешняя ссылка
Пользоваться поиском по словам не представляется возможным, так как могут быть повторы.
Есть ли способ перейти к следующему слову и выделить его?
ссылка на youtube
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-й строки!
Selection.Range - это последний из выбранных фрагментов.
Команды есть для всех кнопок интерфейса Word, в том числе для смены регистра букв:
Application.Run MacroName:="SelectSimilarFormatting"
Application.Run MacroName:="ChangeCase"
Список всех команд:
внешняя ссылка
Selection.Range - это последний из выбранных фрагментов.
Команды есть для всех кнопок интерфейса Word, в том числе для смены регистра букв:Application.Run MacroName:="SelectSimilarFormatting"
Application.Run MacroName:="ChangeCase"Список всех команд:
внешняя ссылка
Спасибо. Но после первого применения данного макроса выделение снимается, как и форматирование.
Можно ли сделать, чтобы обе строки преобразовались в состояние wdUpperCase?
Можно ли запустить команду Application.Run MacroName:="ChangeCase" с параметром wdUpperCase?
Нет, только по кругу.
Придется загнать поиск в цыкл и работать с Range.
Можно поизвращатся с 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, используя какую-либо метку. Например цвет:
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? Это черный цвет?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться