Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > функция chrW


Автор: Insert 17.10.2006, 22:17
 Здравствуйте,
Так недавно, точнее вчера практически впервые увидел синтаксис VBA, так что ясно какой мой уровень.
 Есть макрос, он должен исправлять в тексте символы с кодировкой Latin на кириллицу. Но траблы пока что не в этом. У меня есть разработки другого программера, он тоже писал весч для поиска и форматирования 
каких то слов, так вот я макрос этот должен переделать. есть как бы матрица в буква русского алвавита соответствует коду символа на latin, так когда я читаю символ из документа я должен распознать его код (чтоб заменить на соответствующий ему символ кириллицы), функция которая возвращаяет код символа
вроде ChrW(здесь я вставляю символ из документа). На этой функции как раз компилятор и ругается, типа не соответствие типов, как я понял она не может работать со строками. Может есть альтернативная функция, которая поможет мне получить код символа? 

  Заранее спасибо. smile 

Автор: Romikgy 17.10.2006, 22:24
Chr 
разве не это?

Добавлено @ 22:27 
Код

Returns a String containing the character associated with the specified character code.

Syntax

Chr(charcode)

The required charcode argument is a Long that identifies a character.

Remarks

Numbers from 0 – 31 are the same as standard, nonprintable ASCII codes. For example, Chr(10) returns a linefeed character. The normal range for charcode is 0 – 255. However, on DBCS systems, the actual range for charcode is -32768 to 65535.

Note   The ChrB function is used with byte data contained in a String. Instead of returning a character, which may be one or two bytes, ChrB always returns a single byte. The ChrW function returns a String containing the Unicode character except on platforms where Unicode is not supported, in which case, the behavior is identical to the Chr function.

Note   Visual Basic for the Macintosh does not support Unicode strings. Therefore, ChrW(n) cannot return all Unicode characters for n values in the range of 128 – 65,535, as it does in the Windows environment. Instead, ChrW(n) attempts a "best guess" for Unicode values n greater than 127. Therefore, you should not use ChrW in the Macintosh environment.


Автор: Akina 17.10.2006, 23:36
Код символа возвращает функция Asc и ее вариации.

Цитата

The Asc, AscB, and AscW Functions

These functions are the inverses of the Chr functions. For instance, AscB takes a single character (byte) ABSTR and returns a byte equal to the character's ANSI code. To see that the return type is a byte, try running the code:

Debug.Print VarType(AscB("h")) = vbByte

(The output is True.) It may appear that AscB will accept a BSTR as input, but in reality, it just takes the first byte in the BSTR.

The Asc function takes a BSTR (but not an ABSTR) and returns an integer equal to the character's Unicode code.


Функция Chr и ее вариации выполняют обратную задачу - возвращают символ с заданным кодом

Цитата

The Chr, ChrB, and ChrW Functions

These three functions have different input ranges and produce different outputs. These differences can seem confusing at first—you may have to read the definitions a few times: 

Chr takes a long value x in the range 0 to 255 and returns a BSTR of length 1. This one character pointed to by the BSTR has Unicode code equal to x. (In this case, the Unicode and ANSI values are actually equal.) Note that, according to the latest documentation, there is no difference between Chr and Chr$. 


ChrB takes a long value x in the range 0 to 255 and returns an ABSTR of length 1 (byte). This one byte pointed to by the ABSTR has ANSI code equal to x. 

ChrW takes a long value x in the range 0 to 65535 and returns a BSTR of length 1. This one character pointed to by the BSTR has Unicode code equal to x. 



Автор: Insert 18.10.2006, 14:02
ok, спасибо.
  Я составил с помощью этих функций таблицу кодов и соответствующих им символов и даже смог интегрировать все это в макрос(другого программера, который форматирует слова, н-р: както на как-то), но все работает отлично, если не одно но, этот макрос за единицу берет слово и его сверяет со словом в своей библиотеке, у меня тоже все работает, когда символ кривой представляет собой слово собственной длины, а если этот кривой символ встречается подряд, то он распознает его как слово сравнивает коды и ясно что ниче не совпадает. Короче мне надо взять за единицу не слово а символ и написать процедуру проверки символов по одному начиная с начала до конца документа , как организовать такой цикл? замену внутри цикла думаю сам напишу.

Автор: Insert 18.10.2006, 18:25
сорри, ответ на предыдущий пост нашел, но появилась новая трабла:
как заменить весь текст документа на переменную стринг?

Автор: Akina 18.10.2006, 18:31
Еще понять бы где у тебя текст документа? в Ворде? или еще где?

Автор: Insert 18.10.2006, 20:34
да в ворде я к нему обращатся пытаюсь как Thisdocument. итд.
Появилась новая трабла, когда модуль принес домой, попробовал запустить, то как я понял он не видит текста документа, потому что ThisDocument.Characters.Count на работе выдавала количество символов, а дома всегда 1, не смотря на то есть текст или нету, с чем это может быть связано?

Автор: Genyaa 18.10.2006, 23:02
Цитата(Insert @ 18.10.2006,  19:25)
как заменить весь текст документа на переменную стринг?

ThisDocument.Content.Text - возвращает текст Этого документа в виде String.

Автор: Insert 19.10.2006, 15:41
Спасибо большое.
   У меня последний вопрос: как обратится к выделенному тексту и получить от него количество символов и сам текст?
 З.Ы: InStr - что это за функция и что она делает?
ЗЗЫ: можно ли обратится к символу переменной типа стринг по индексу как это в pascal/delphi?

Автор: Aloha 19.10.2006, 19:38
Insert

Цитата
как обратится к выделенному тексту и получить ... сам текст
Код
Selection.Text

_________________________________________
Цитата
как обратится к выделенному тексту и получить от него количество символов
Код
Selection.Characters.Count
или
Код
Len(Selection.Text)

_________________________________________
Цитата
InStr - что это за функция и что она делает
InStr([start,] string1, string2[, compare])
Возвращает Variant (Long) определяющее позицию первого вхождения одной строки в другую
Аргументы функции InStr:
start    Необязательный. Числовое выражение, которое устанавливает начальную позицию для поиска. Если опущено, поиск начинается с первого символа. Требуется, если определен характер сравнения.
string1    Обязательный. Строковое выражение, в котором ведется поиск.
string2    Обязательный. Строковое выражение, поиск которого ведется.
compare    Необязательный. Определяет тип сравнения строк.
_________________________________________
Цитата
можно ли обратится к символу переменной типа стринг по индексу

Mid(string, start[, length])
Код
Mid(v_String, v_CharacterNumber, 1)


Автор: Genyaa 19.10.2006, 19:59
Цитата

   У меня последний вопрос: как обратится к выделенному тексту и получить от него количество символов и сам текст?

Selection.Text - выделенный в данный момент текст в виде String
Len(Selection.Text) - длина выделенного текста 
Slection.Characters.Count - количество символов в выделенной области - у меня получилось это равно Len(Selection.Text)
Цитата

 З.Ы: InStr - что это за функция и что она делает?

Возвращает положение (адрес) подстроки в строке, если построка есть в этой строке, иначе 0.
Цитата

ЗЗЫ: можно ли обратится к символу переменной типа стринг по индексу как это в pascal/delphi?

Функция Mid возвращает любую часть строки с указанного символа указанной длины. Например:

Mid("Это пример текста", 8, 1) вернет "м"

Автор: Insert 19.10.2006, 20:33
Большое вам спасибо) буду пробовать. Aloha твой код попробую оч надеюсь что подойдет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)