Имею пользовательские функции (Excel 2010), UNICHAR и UNICODE. Но они работают не полностью. К примеру, функция UNICHAR работает только по число 65535, а функция UNICODE отображает код символа, только если его значение не превышает 65535. Кроме того, функция UNICODE возвращает результат в виде текстового значения. К примеру, мне необходимо получить коды таких символов (смотрите картинку вложениє), но сожалению пользовательская функция выдает одинаковое для всех указанных символов значение "-10240" Тогда как встроенная функция в новіе версии EXCEL справляется с этим на ура. Как вылечить пользовательские функции, чтобы обрабатывали весь диапазон юникода.
[vba]
Код
Function UNICHAR(Число As Long) As String ' Возвращает символ с заданым кодом UNICHAR = ChrW(Число) End Function
Function UNICODE(Текст As String) As String ' Возвращает числовой код первого символа в текстовой строке UNICODE = AscW(Текст) End Function
[/vba]
Помогите исправить
С уважением
Здравствуйте
Имею пользовательские функции (Excel 2010), UNICHAR и UNICODE. Но они работают не полностью. К примеру, функция UNICHAR работает только по число 65535, а функция UNICODE отображает код символа, только если его значение не превышает 65535. Кроме того, функция UNICODE возвращает результат в виде текстового значения. К примеру, мне необходимо получить коды таких символов (смотрите картинку вложениє), но сожалению пользовательская функция выдает одинаковое для всех указанных символов значение "-10240" Тогда как встроенная функция в новіе версии EXCEL справляется с этим на ура. Как вылечить пользовательские функции, чтобы обрабатывали весь диапазон юникода.
[vba]
Код
Function UNICHAR(Число As Long) As String ' Возвращает символ с заданым кодом UNICHAR = ChrW(Число) End Function
Function UNICODE(Текст As String) As String ' Возвращает числовой код первого символа в текстовой строке UNICODE = AscW(Текст) End Function
Function UCode&(s$) If Len(s) = 1 Then UCode = cor(s): Exit Function f = cor(Mid(s, 1)): l = cor(Mid(s, 2)) UCode = tr(f, l, d1 + (f - d2) * d4 + (l - d3), f) End Function
Function UChar$(d&) If d < d1 Then UChar = ChrW(d): Exit Function a = d - d1: f = d2 + a \ d4: l = d3 + a Mod d4 UChar = tr(f, l, ChrW(f) & ChrW(l), "") End Function
Private Function cor&(x$) z = AscW(x): cor = z + IIf(z < 0, d1, 0) End Function
Private Function tr(x, y, z, w) tr = IIf(x >= d2 And x < d3 And y >= d3 And y <= 57343, z, w) End Function
Function UCode&(s$) If Len(s) = 1 Then UCode = cor(s): Exit Function f = cor(Mid(s, 1)): l = cor(Mid(s, 2)) UCode = tr(f, l, d1 + (f - d2) * d4 + (l - d3), f) End Function
Function UChar$(d&) If d < d1 Then UChar = ChrW(d): Exit Function a = d - d1: f = d2 + a \ d4: l = d3 + a Mod d4 UChar = tr(f, l, ChrW(f) & ChrW(l), "") End Function
Private Function cor&(x$) z = AscW(x): cor = z + IIf(z < 0, d1, 0) End Function
Private Function tr(x, y, z, w) tr = IIf(x >= d2 And x < d3 And y >= d3 And y <= 57343, z, w) End Function