Word VBA: Замена неправильного дефиса

Автор Anton, 29 августа 2016, 12:56

Anton

Добрый день!

У меня есть текст, с помощью макроса выполняю замену с помощью подстановочных знаков. Меняю дефисы на неразрывные. Дефис, как известно, это ^0045. Но вдруг в тексте встретились другие какие-то дефисы. Как найти код Chrw этого символа? Пример приложил - в первом случае дефис неправильный.
Вообще, в идеале, хотел найти макрос, который определяет код Chrw любого символа, но не нашел, к сожалению.

[вложение удалено администратором]

Администратор

Юникод-код символа можно узнать так. В ворд-файле выделите символ, у которого нужно узнать юникод-код, - перейдите в VBA и отобразите окно: View - Immediate Window, - вставьте туда код, который ниже, и нажмите Enter:
Print AscW(Selection.Text)

Anton

Да, так получается узнать, спасибо.

Anton

А вот на другом примере не работает. Код неправильно определяет. Пример прикрепил.

[вложение удалено администратором]

Администратор

Да, в этом случае AscW возвращает 40 и метод Find не находит.
Тогда пробуйте так узнавать юникод-код символа. Скопируйте символ, для которого нужно узнать юникод-код, отобразите диалог "Найти и заменить" и вставьте скопированный символ в поле "Найти" - включите запись макросов и щёлкните "Найти" - остановите запись макросов и используйте юникод-код из записанного макроса.

Anton

Спасибо. Ну так да, нашел. Но метод, конечно... Неужели для всего могучего VBA не существует функции для определения правильного кода Chrw? Тут хоть он у меня как иероглиф какой-то отображается, а на днях, помню, какой-то символ вообще никак при вставке не отображался.

Администратор

Не знаю, может быть и есть в VBA что-то ещё.

Тут нужно различать:
1) сам VBA;
2) возможности программы "Word".

Сам VBA не смог определить код символа, а программа "Word" смогла с помощью метода "Find".

Посетитель 29.10.2022

Print AscW(Selection.Text) пишу в Immediate Window выделяю символ сперва. Символ, который выделяю ККЯ совместимый Идеограф-2F804 你. Вот что потом Print AscW(Selection.Text)
-10114 .
Но как такой код потом использовать? ChrW(-10114) так же не пойдет. Вот так тоже не хочет ChrW(194564). Как тогда быть?


Администратор

Можете выложить файл, в котором будет этот символ?

Посетитель 29.10.2022

Вот файл с символом

Администратор

Цитата:
ChrW(-10114) так же не пойдет.

Я использовал этот код, вставился символ. Если вставляется, то можно попробовать так и вставлять.

Посетитель 29.10.2022

Если ChrW(-10114), то вот что а если скопировать и вставить при записи макроса  то вот как ChrW(55422) & ChrW(56324). Как тогда узнать что если символ 194564, то оно вот как ChrW(55422) & ChrW(56324)

Администратор

Цитата:
а если скопировать и вставить при записи макроса

Я при записи макроса скопировал и вставил, макрорекордер не использовал ChrW.
Как вы копируете и вставляете во время записи макроса?

Посетитель 29.10.2022

Я копирую из ворда символ, запускаю запись макроса потом найти и заменить пишу найти пробел заменить на пробел и вставляю из буфера обмена символ. Потом останавливаю запись макроса и смотрю результат, а там
With Selection.Find
        .Text = " "
        .Replacement.Text = " " & ChrW(55422) & ChrW(56324)
        .Forward = True
Этот символ получается состоит из двух. Как то так
Делаю запись макроса и делаю Alt+194564  получается все равно    Selection.TypeText Text:=ChrW(55422) & ChrW(56324)
Каким  образом можно узнать как так? 

Администратор

Вы хотите использовать этот символ в Найти и заменить? Или нет?