Форум по VBA, Excel и Word

Word => Макросы в Word => Тема начата: Anton от 29 августа 2016, 12:56

Название: Word VBA: Замена неправильного дефиса
Отправлено: Anton от 29 августа 2016, 12:56
Добрый день!

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

[вложение удалено администратором]
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Администратор от 29 августа 2016, 20:07
Юникод-код символа можно узнать так. В ворд-файле выделите символ, у которого нужно узнать юникод-код, - перейдите в VBA и отобразите окно: View - Immediate Window, - вставьте туда код, который ниже, и нажмите Enter:
Print AscW(Selection.Text)
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Anton от 29 августа 2016, 21:05
Да, так получается узнать, спасибо.
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Anton от 29 августа 2016, 21:26
А вот на другом примере не работает. Код неправильно определяет. Пример прикрепил.

[вложение удалено администратором]
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Администратор от 29 августа 2016, 21:45
Да, в этом случае AscW возвращает 40 и метод Find не находит.
Тогда пробуйте так узнавать юникод-код символа. Скопируйте символ, для которого нужно узнать юникод-код, отобразите диалог "Найти и заменить" и вставьте скопированный символ в поле "Найти" - включите запись макросов и щёлкните "Найти" - остановите запись макросов и используйте юникод-код из записанного макроса.
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Anton от 29 августа 2016, 22:21
Спасибо. Ну так да, нашел. Но метод, конечно... Неужели для всего могучего VBA не существует функции для определения правильного кода Chrw? Тут хоть он у меня как иероглиф какой-то отображается, а на днях, помню, какой-то символ вообще никак при вставке не отображался.
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Администратор от 29 августа 2016, 22:32
Не знаю, может быть и есть в VBA что-то ещё.

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

Сам VBA не смог определить код символа, а программа "Word" смогла с помощью метода "Find".
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Посетитель 29.10.2022 от 11 ноября 2022, 14:28
Print AscW(Selection.Text) пишу в Immediate Window выделяю символ сперва. Символ, который выделяю ККЯ совместимый Идеограф-2F804 你. Вот что потом Print AscW(Selection.Text)
-10114 .
Но как такой код потом использовать? ChrW(-10114) так же не пойдет. Вот так тоже не хочет ChrW(194564). Как тогда быть?

Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Администратор от 11 ноября 2022, 14:35
Можете выложить файл, в котором будет этот символ?
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Посетитель 29.10.2022 от 11 ноября 2022, 14:39
Вот файл с символом
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Администратор от 11 ноября 2022, 14:57
Цитата:
ChrW(-10114) так же не пойдет.

Я использовал этот код, вставился символ. Если вставляется, то можно попробовать так и вставлять.
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Посетитель 29.10.2022 от 11 ноября 2022, 15:24
Если ChrW(-10114), то вот что а если скопировать и вставить при записи макроса  то вот как ChrW(55422) & ChrW(56324). Как тогда узнать что если символ 194564, то оно вот как ChrW(55422) & ChrW(56324)
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Администратор от 11 ноября 2022, 15:48
Цитата:
а если скопировать и вставить при записи макроса

Я при записи макроса скопировал и вставил, макрорекордер не использовал ChrW.
Как вы копируете и вставляете во время записи макроса?
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Посетитель 29.10.2022 от 11 ноября 2022, 18:26
Я копирую из ворда символ, запускаю запись макроса потом найти и заменить пишу найти пробел заменить на пробел и вставляю из буфера обмена символ. Потом останавливаю запись макроса и смотрю результат, а там
With Selection.Find
        .Text = " "
        .Replacement.Text = " " & ChrW(55422) & ChrW(56324)
        .Forward = True
Этот символ получается состоит из двух. Как то так
Делаю запись макроса и делаю Alt+194564  получается все равно    Selection.TypeText Text:=ChrW(55422) & ChrW(56324)
Каким  образом можно узнать как так? 
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Администратор от 11 ноября 2022, 19:24
Вы хотите использовать этот символ в Найти и заменить? Или нет?
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Посетитель 29.10.2022 от 12 ноября 2022, 12:54
Найти заменить лего. Просто как узнать какие символы которые больше чем 65535, Символы свыше 65535являются суррогатными и состоят из двух подряд идущих символов. Вот как узнать эти пары символов для тех что больше 65536. Каждый символ конечно можно через найти заменить определить. А вот как то все сразу узнать вариант которые до 65536  вот вариант
For u = 1 To 65535
Символ_цифрового_ANSI_кода = ChrW(u)
Selection.TypeText Text:=u & " " & Символ_цифрового_ANSI_кода
Selection.TypeParagraph 'вставить абзац, то есть параграф
а вот есть что то как узнать какие пары идут после 65535
Может можно как то автоматизировать вот такой вариант.
Alt+65537 дает
Selection.TypeText Text:=ChrW(55617) & ChrW(57324)
Alt+65538 дает
Selection.TypeText Text:=ChrW(55296) & ChrW(56322)
ну и так до Alt+917997
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Администратор от 12 ноября 2022, 13:00
В каком коде вы планируете использовать ChrW? Напишите код, который у вас не работает.
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Посетитель 29.10.2022 от 12 ноября 2022, 13:15
Вот так ошибка
For u = 65537 To 917997
Символ_цифрового_ANSI_кода = ChrW(u)
Selection.TypeText Text:=u & " " & Символ_цифрового_ANSI_кода
Selection.TypeParagraph 'вставить абзац, то есть параграф
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Администратор от 12 ноября 2022, 14:21
Не смогу помочь по этому вопросу, такие нюансы я не знаю про юникод-коды.
Если мне нужен символ ChrW(-10114), я его так и вставлю ChrW(-10114). Ворд это позволяет сделать.
Почему VBA даёт такой юникод, я не знаю и не задумываюсь над этим. Нет возможности в это вникать. Посмотрите в интернете статьи, может обсуждалось это.
Название: Re: Word VBA: Замена неправильного дефиса
Отправлено: Посетитель 29.10.2022 от 20 декабря 2022, 18:08
Здравствуйте Администратор. Как с Вами связаться? На почту нет ответа