Добрый день!
У меня есть текст, с помощью макроса выполняю замену с помощью подстановочных знаков. Меняю дефисы на неразрывные. Дефис, как известно, это ^0045. Но вдруг в тексте встретились другие какие-то дефисы. Как найти код Chrw этого символа? Пример приложил - в первом случае дефис неправильный.
Вообще, в идеале, хотел найти макрос, который определяет код Chrw любого символа, но не нашел, к сожалению.
[вложение удалено администратором]
Юникод-код символа можно узнать так. В ворд-файле выделите символ, у которого нужно узнать юникод-код, - перейдите в VBA и отобразите окно: View - Immediate Window, - вставьте туда код, который ниже, и нажмите Enter:
Print AscW(Selection.Text)
Да, так получается узнать, спасибо.
А вот на другом примере не работает. Код неправильно определяет. Пример прикрепил.
[вложение удалено администратором]
Да, в этом случае AscW возвращает 40 и метод Find не находит.
Тогда пробуйте так узнавать юникод-код символа. Скопируйте символ, для которого нужно узнать юникод-код, отобразите диалог "Найти и заменить" и вставьте скопированный символ в поле "Найти" - включите запись макросов и щёлкните "Найти" - остановите запись макросов и используйте юникод-код из записанного макроса.
Спасибо. Ну так да, нашел. Но метод, конечно... Неужели для всего могучего VBA не существует функции для определения правильного кода Chrw? Тут хоть он у меня как иероглиф какой-то отображается, а на днях, помню, какой-то символ вообще никак при вставке не отображался.
Не знаю, может быть и есть в VBA что-то ещё.
Тут нужно различать:
1) сам VBA;
2) возможности программы "Word".
Сам VBA не смог определить код символа, а программа "Word" смогла с помощью метода "Find".
Print AscW(Selection.Text) пишу в Immediate Window выделяю символ сперва. Символ, который выделяю ККЯ совместимый Идеограф-2F804 你. Вот что потом Print AscW(Selection.Text)
-10114 .
Но как такой код потом использовать? ChrW(-10114) так же не пойдет. Вот так тоже не хочет ChrW(194564). Как тогда быть?
Можете выложить файл, в котором будет этот символ?
Вот файл с символом
Цитата:
ChrW(-10114) так же не пойдет.
Я использовал этот код, вставился символ. Если вставляется, то можно попробовать так и вставлять.
Если ChrW(-10114), то вот что а если скопировать и вставить при записи макроса то вот как ChrW(55422) & ChrW(56324). Как тогда узнать что если символ 194564, то оно вот как ChrW(55422) & ChrW(56324)
Цитата:
а если скопировать и вставить при записи макроса
Я при записи макроса скопировал и вставил, макрорекордер не использовал ChrW.
Как вы копируете и вставляете во время записи макроса?
Я копирую из ворда символ, запускаю запись макроса потом найти и заменить пишу найти пробел заменить на пробел и вставляю из буфера обмена символ. Потом останавливаю запись макроса и смотрю результат, а там
With Selection.Find
.Text = " "
.Replacement.Text = " " & ChrW(55422) & ChrW(56324)
.Forward = True
Этот символ получается состоит из двух. Как то так
Делаю запись макроса и делаю Alt+194564 получается все равно Selection.TypeText Text:=ChrW(55422) & ChrW(56324)
Каким образом можно узнать как так?
Вы хотите использовать этот символ в Найти и заменить? Или нет?
Найти заменить лего. Просто как узнать какие символы которые больше чем 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
В каком коде вы планируете использовать ChrW? Напишите код, который у вас не работает.
Вот так ошибка
For u = 65537 To 917997
Символ_цифрового_ANSI_кода = ChrW(u)
Selection.TypeText Text:=u & " " & Символ_цифрового_ANSI_кода
Selection.TypeParagraph 'вставить абзац, то есть параграф
Не смогу помочь по этому вопросу, такие нюансы я не знаю про юникод-коды.
Если мне нужен символ ChrW(-10114), я его так и вставлю ChrW(-10114). Ворд это позволяет сделать.
Почему VBA даёт такой юникод, я не знаю и не задумываюсь над этим. Нет возможности в это вникать. Посмотрите в интернете статьи, может обсуждалось это.
Здравствуйте Администратор. Как с Вами связаться? На почту нет ответа