Статьи из блога
Зеркальное отображение текста
Начиная с версии 6 в VBA появилась команда strReverce, предоставляющая возможность отзеркаливать символы. Например, слово ЖУК после выполнения следующего макроса будет выглядеть как КУЖ.
Sub reverse() 'Замена выделенного фрагмента текста на его 'зеркальное отображение Dim strStroka As String Dim strRev As String strStroka = Selection.Text strRev = strReverse(strStroka) Selection.Text = Replace(strStroka, strStroka, strRev) End Sub
Как использовать: выделите текст и выполните макрос.
Обновление: в комментариях приведен более продвинутый макрос для этого действия.
Рубрика: Макросы, Стили и форматирование
Метки: strReverce | макросы
Просмотров: 63517
Подписаться на комментарии по RSS
Версия для печати
Метки: strReverce | макросы
Просмотров: 63517
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 3 способа очистки списка недавно открытых документов
- Word 2007: полотно, рисунки, линии
- Word 97. Слияние документов как один из способов упростить свою работу
- Абзац с цветным фоном
- Автозаполняемые колонтитулы
- Автоматическая запись макроса
- Автоматическая нумерация билетов
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение документа при его закрытии
- Автотекст с последовательной нумерацией
- Автоформат документов
- Буквица
- Быстрая смена ориентации страниц документа
- Быстрое изменение стиля форматирования текста
- Быстрое перемещение между открытыми документами Word
- Быстрое создание нового документа на основе шаблона
- Быстрое удаление границ у таблицы
- Быстрый ввод текста с помощью команды =rand()
- Быстрый поиск форматированного текста
- В чем различие между Автозаменой и Автотекстом
- В чем различие между стилями Обычный (Normal) и Основной текст (Body Text)?
- Ввод повторяющихся фрагментов текста в Word 2007
- Ввод часто повторяющихся фрагментов текста
- Вставка будущей даты
Комментариев: 26
Странная функия... я вот думал-думал над тем, где ее можно применить... так и не придумал ничего, может кто-то подскажет?
Меня однажды спрашивали о возможности сделать зеркальное отображение текста на VBA, но я не нашел в то время ответа. И вот буквально недавно узнал об этой функции, поэтому и написал эту заметку.
Да, кажется на первый взгляд, что особого применения ей не найти. Но кто знает...
Здравствуйте,
уважаемый Антон Кокин
Если использовать этот макрос то из предложения
Привет, день пришел. _имеем_ .леширп ьнед ,тевирП
Возможно ли чтобы переворачивались только слова в предложении но при этом сами слова оставались на своих местах.
Вот так_ тевирП, ьнед .леширп
И было бы совсем здорово, если бы это можно было применить к нескольким абзацам и при этом слова не перескакивали из одной строки в другую.
Здравствуйте Илья.
Вот код, который мне подсказали на форуме Программирование на Visual Basic, VB 6.0, VBA, VB.net:
Однако, при использовании этого макроса никуда не деться от знаков препинания. Они привязаны к словам. Увы...
Здравствуйте,
Антон Кокин
Спасибо за ответ и предложенный макрос. То, что знаки препинания привязаны к словам, это здорово, хотя их и можно, до преобразования, отделить от слов пробелами и удалить лишние пробелы после, но это не нужно. Для предложения все прекрасно работает.
У меня есть проблема при обработке абзаца. Если обработать один абзац, то для последнего слова в предложении создается свой абзац и предложение разделяется. Обойти это можно, если между последним словом и абзацем поставить пробел. Но для нескольких абзацев это уже не работает. Можно ли что-то сделать?
С уважением,
Илья
Здравствуйте,
Антон Кокин
Я думаю, что нашел, почему макрос переносит последнее слово, из абзаца. Он воспринимает завершение абзаца, как часть слова, и пытается отзеркалить эту связку. Поэтому пробел пред завершением абзаца выручает. Но с несколькими абзацами мне ничего не понятно, не помогают ни пробелы, ни дополнительные слова. Что самое интересное если разделить абзацы с текстом несколькими пустыми абзацами, то слово все равно перенесется в абзац с текстом.
С уважением,
Илья
Илья, простите что задержался с ответом. Вот чуть поправленный код макроса, который вроде бы не трогает знак абзаца:
Здравствуйте,
Антон Кокин
Спасибо за отредактированный макрос. Последний доработанный вариант, лучше. Он корректно обрабатывает, один абзац, и без пробела между последним символом и концом абзаца. К сожалению, несколько абзацев, без переноса слова, он также не обрабатывает. И тоже удивительное поведение, если разделить абзацы с текстом несколькими пустыми абзацами, то слово все равно перенесется в абзац с текстом. Возможно ли это исправить?
Еще раз спасибо, за внимание и потраченное время.
С уважением,
Илья
Илья, макрос дорабатывал не я и не я его создавал. Это помощь с форума Программирование на Visual Basic, VB 6.0, VBA.
Теоретически можно исправить, но к сожалению у меня не хватает для этого знаний. Увы...
Мне помогли написать работающий макрос, жаль не на форуме "Программирование на Visual Basic, VB 6.0, VBA".
Есть небольшие недочеты, но с моей задачей макрос полностью справляется. Выкладываю, может еще кому пригодиться.
С уважением,
Илья
Илья, спасибо. Кто-то в офлайне вам помог?
Я часто бываю на http://forum.ru-board.com. Отслеживаю там разные топики и отвечаю на вопросы, если могу помочь. Как-то, когда мы решали очередную проблему, мне в ПМ пришло письмо, от пользователя, который здорово разобрался с ней. Он предложил озвучить это предложение, и попросил на него не ссылаться. Он еще так помогает, когда вопросы трудные и сразу их решить не получается. Я предположил, что человек здорово разбирается в программировании, и задал ему вопрос о макросе. Его результат в моем предыдущем посте. По-моему его решение, как обойти проблему абзаца гениальное, просто и эффективно.
С уважением,
Илья
Да, его решение простое и ясное.
Народ! Необходима помощь!! Необходимо не только отзеркалить текст, но и буквы в нем с помощью Ворда, без использования графики. Например слово ИМЯ должно писаться как RMN.. Заранее Спасибо!
Присоединяюсь к osi,очень нужен макрос зеркалящиий буквы!Помогите пожалуйста!!!Заранее огромное спасибо!!!
Интересно, а как вы собиратесь зеркалить без использования графики сугубо кириллические символы: Щ, Ц, Й и прочие?
Проблема интересная, нужно подумать. Раньше я на эту тему внимания не обращал, жаль.
Спасибо за ответ.К сожалению я мало,что поимаю,как происходит процесс зеркаливания и вчера даже пытался заменить русские буквы латиницей Я на R,но потом понял,что для очень многих букв альтернативы нет.Надеюсь у людей более разбирающихся,что-то получится придумать.
Думаю, что без API здесь не получится.
Я надеялся на встроенный метод CopyAsPicture, но он обманчивый. В буфер копируется не картинка, как ожидается из названия, а текст, который потом можно вставить как картинку через PasteSpecial.
Будем думать.
Напишите пожалуйста здесь о результатач,даже если они будут отрицательные.Большое спасибо за помощь!
Результаты есть, правда, не знаю насколько они соответствуют Вашим ожиданиям.
Мне удалось получить зеркальное отображение текста, но только в виде картинки. Даже сделал на эту тему небольшой макрос, который позволяет получить прямое либо зеркальное изображение буквы, слова, предложения, абзаца или выделенного текста. Но как это использовать я, честно говоря, не знаю.
Вот что у меня получилось:
Прямой текст
Текст, зеркальный относительно вертикальной оси:
Текст, зеркальный относительно горизонтальной оси:
Текст, зеркальный относительно вертикальной и горизонтальной осей:
Проблема решилась довольно просто. С помощью программы FontLab Studio 5, "зазеркалил" стандартный шрифт Arial, затем воспользовался макросом выше чтобы буквы располагались справа налево.
Александр, извините, а как Вы конкретно смогли получить такие отражения?
Всеволод, давненько это было. Принцип такой: берётся фрагмент документа, определяются его экранные координаты, а дальше с помощью функций WinAPI делается скриншот этой области экрана и различные преобразования с ним. Если интересно, то я могу выслать вам пример документа. Для человека, далёкого от программирования, там тёмный лес.
Работать можно только с видимой на экране частью документа.
Понятненько. Я, в общем-то, далек от программирования. Использовал самый первый скрипт и повернутый шрифт. В итоге получил зеркальный макет для печати текстов на обороте кальки на струйном принтере (для защиты от размазывания текста влажными пальцами). Единственно с чем не справился - с обращением курсива: при его зазеркаливании он ложится "не в ту" сторону (влево, а не направо). Может ли кто-нить подсказать, что можно бы добавить в скрипт, чтобы это решить?
ОН НУЖЕН ДЛЯ ТАТУИРОВОК В ЗЕРКАЛЬНОМ ВИДЕ НАНОСИШЬ НА ТЕЛО!
Здравствуйте. а можно ли отобразить текст относительно какой-нибудь буквы, в данном случаи?
Заранее спасибо.