Страницы: 1
RSS
Перестала работать функция  Translit
 
перестала работать функция  Translit
или ничего не отображает либо же переведенный текст равен исходному
Код
Function Translit(Txt As String) As String
   Application.Volatile
 
    Dim Rus As Variant
    Rus = Array("ŕ", "á", "â", "ă", "´", "ä", "ĺ", "ş", "ć", "ç", "č", "ł", _
    "ż", "é", "ę", "ë", "ě", "í", "î", "ď", "đ", "ń", "ň", "ó", "ô", "ő", _
    "ö", "÷", "ř", "ů", "ü", "ţ", "˙", "Ŕ", "Á", "Â", "Ă", "Ą", "Ä", "Ĺ", _
    "Ş", "Ć", "Ç", "Č", "˛", "Ż", "É", "Ę", "Ë", "Ě", "Í", "Î", _
    "Ď", "Đ", "Ń", "Ň", "Ó", "Ô", "Ő", "Ö", "×", "Ř", "Ů", "Ü", "Ţ", "ß", "'", "-", " ")
 
    Dim Eng As Variant
    Eng = Array("A", "B", "V", "H", "G", "D", "E", "IE", "ZH", "Z", "Y", "I", "I", "I", _
    "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "KH", "TS", "CH", _
    "SH", "SHCH", "", "IU", "IA", "A", "B", "V", "H", "G", "D", _
    "E", "YE", "ZH", "Z", "Y", "I", "I", "I", "K", "L", "M", "N", "O", "P", "R", _
    "S", "T", "U", "F", "KH", "TS", "CH", "SH", "SHCH", "", "YU", "YA", "", "-", " ")
     
    For I = 1 To Len(Txt)
        c = Mid(Txt, I, 1)
     
        flag = 0
        For J = 0 To 68
            If Rus(J) = c Then
                outchr = Eng(J)
                flag = 1
                Exit For
            End If
        Next J
        If flag Then outstr = outstr & outchr Else outstr = outstr & c
    Next I
     
    Translit = outstr  
End Function

п.с.  иероглифы появились при копировании кода
 
Если копировать не при английской раскладке, иероглифов не будет.
Код в сообщении следует оформлять с помощью кнопки <...>
Файл-пример ускорит помощь
 
Вот пример и код
Код
Function Translit(Txt As String) As String

   Application.Volatile
 
    Dim Rus As Variant
    Rus = Array("а", "б", "в", "г", "ґ", "д", "е", "є", "ж", "з", "и", "і", _
    "ї", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", _
    "ц", "ч", "ш", "щ", "ь", "ю", "я", "А", "Б", "В", "Г", "Ґ", "Д", "Е", _
    "Є", "Ж", "З", "И", "І", "Ї", "Й", "К", "Л", "М", "Н", "О", _
    "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ь", "Ю", "Я", "'", "-", " ")
 
    Dim Eng As Variant
    Eng = Array("A", "B", "V", "H", "G", "D", "E", "IE", "ZH", "Z", "Y", "I", "I", "I", _
    "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "KH", "TS", "CH", _
    "SH", "SHCH", "", "IU", "IA", "A", "B", "V", "H", "G", "D", _
    "E", "YE", "ZH", "Z", "Y", "I", "I", "I", "K", "L", "M", "N", "O", "P", "R", _
    "S", "T", "U", "F", "KH", "TS", "CH", "SH", "SHCH", "", "YU", "YA", "", "-", " ")
     
    For I = 1 To Len(Txt)
        c = Mid(Txt, I, 1)
     
        flag = 0
        For J = 0 To 68
            If Rus(J) = c Then
                outchr = Eng(J)
                flag = 1
                Exit For
            End If
        Next J
        If flag Then outstr = outstr & outchr Else outstr = outstr & c
    Next I
     
    Translit = outstr
    
       
End Function

Изменено: kauk.yurii - 31.03.2018 10:12:49
 
В редакторе VBE. Tools - References - Снимите галку напротив всех пунктов, где стоит MISSING
Изменено: Sanja - 31.03.2018 10:14:52
Согласие есть продукт при полном непротивлении сторон
 
не вижу пунктов с MISSING
Изменено: kauk.yurii - 31.03.2018 10:19:08
 
А вот и мой скриншот Вашего файла
Согласие есть продукт при полном непротивлении сторон
 
ок, галочку снял, ефект тот же:(
 
У меня все работает. Excel 2010 (х32)
Согласие есть продукт при полном непротивлении сторон
 
может проблема как  раз в настройках ексель, так как проблема появилась при переносе файла на другой ПК, версия офиса та же
 
Как вариант - измените название функции.
Возможно, эта ваша библиотека вызывает конфликт имен.
У нас ее нет, поэтому конкретней сказать сложно.
 
все равно без ефекта, может кто то сможет помочь через teamviewer?
 
Обойдемся своими силами. Выполните в новой книге на проблемном компьютере макрос, содержащий код:
Код
Sub Test
Range("A1")="Я люблю Excel"
End Sub
В ячейке A1 все хорошо (тот же текст)?
Владимир
 
Цитата
sokol92 написал:
В ячейке A1 все хорошо (тот же текст)?
не совсем
 
Диагноз. На проблемном компьютере кодовая страница Windows по умолчанию отлична от 1251. Код VBA, содержащий текстовые литералы, внутри которых есть буквы русского алфавита, работать не будет. Лечение: не использовать в программах, которые планируется применять на различных платформах, текстовые литералы, содержащие символы с кодами >=128.
Владимир
 
Не понял как мне исправить мою проблему
 
Наверное нужно переписать функцию с заменой русских букв на их ANCII-коды. Возможно поможет
Согласие есть продукт при полном непротивлении сторон
 
Цитата
kauk.yurii написал:
Не понял как мне исправить мою проблему
Проверить региональные настройки системы и там есть пункт о кодировке для программ не использующих UNICODE  
Изменено: БМВ - 31.03.2018 12:29:04
По вопросам из тем форума, личку не читаю.
 
Два варианта:
  • попросить формулистов
  • создать две именованные ячейки, куда перенести информацию из массивов Rus и Eng (все, что внутри скобок функций Array). Массивы Rus и Eng формировать динамически при первом обращении на основе информации упомянутых именованных ячеек
.

Со вторым вариантом могу помочь (на первый нет лицензии :) )
Владимир
 
Вариант, предложенный Sanja, теоретически может помочь, но проще символы Unicode записывать в ячейки рабочих листов, поскольку у Excel, в отличие от VBA, с Unicode все в порядке.
БМВ (как системщик) прибил бы того, кто дает такие советы, как в #17  :evil:  
Владимир
 
sokol92, а вот тут вы не правы, в 99% случаях проблемы возникают, несмотря на то что Excel работает с UNICODE, и система работает, а проблемы возникают. И опыт сисадмина у меня не малый. Пусть ТС проверит. Ведь проблема именно на другом ПК.
По вопросам из тем форума, личку не читаю.
 
Уважаемый БМВ, я всегда восхищаюсь Вашей незаурядной эрудицией. Но представьте, что это чужой компьютер (за ним сидит, скажем, француз), а мы приходим со своим файлом и на основе того, что у нас не работает транслитерация, просим внести изменения в системные настройки. На мой взгляд, переносимые приложения должны работать на всех версиях Windows и Excel (2007+, 32/64) без модификации региональных настроек.
Владимир
 
Off sokol92, Тут я более чем согласен, и против некоторых сторон локализации как никто другой, наверно это заметно и по моим формулам и скринам, которые всегда строго ENG. Но порой нас ставят в рамки, которые не зависят от нас. Приведу два примера.
1. Формульный - Функция листа FORMAT и необходимость использования в ней строго локализованных форматов дат, которые соответствуют локализации интерфейса программы.
2. Попробуйте из VBA построить авто фильтр по True/False. Локаль русская и требуется Истина.
3. Разделители, которые тоже гуляют.
Да, все пункты решаемы путем трюков с выяснением, а что должно быть, но я с трудом представляю анализ всех возможных ДД.МММ.ГГГГ . Поверить ENG/RUS просто, а ведь могут быть прочие языки.
Ну, а ТСу надо помочь не на Français, Deutsch , Nederlands  ....
Изменено: БМВ - 31.03.2018 13:14:29
По вопросам из тем форума, личку не читаю.
 
Off. У нас есть положительный (как нам кажется) опыт создания объемных переносимых приложений. Собираюсь написать на эту тему заметку в Курилку, даже получил на это одобрение некоторых корифеев форума. Спасибо за интересные вопросы, постараюсь учесть...

Что-то автор темы молчит...
Владимир
 
Very Off
sokol92, как  бы не старались мы, должен большую часть учесть разработчик платформы. Привожу забавный пример функция листа CELL Первый аргумент независимо от локализации понимает интернациональный код и только в конкретной локализации локализованный.
Если б так было всегда, то проблем было б меньше.

Что касается темы в курилке. С удовольствием буду вносить свой вклад. Собаку не ел, но работая в интернациональной многоязычной компании приходилось решать некоторые вопросы, включая адаптацию к Libre, где несмотря на локализацию, все формулы и форматы строго на ENG.
По вопросам из тем форума, личку не читаю.
 
БМВ,спасибо за общение!
Владимир
Страницы: 1
Наверх