Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
24.04.2024, 21:36:35

Войти
Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе ХИТРОСТИ
33 242 Сообщений в 5 457 Тем от 6 761 Пользователей
Последний пользователь: Halfdoor
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Полезные решения
| | |-+  Борьба с "кракозябрами", вставляемыми из буфера обмена VISTA и Win-7
Страниц: [1]   Вниз
Печать
Автор Тема: Борьба с "кракозябрами", вставляемыми из буфера обмена VISTA и Win-7  (Прочитано 16923 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Alex_ST
Постоялец
***

Репутация: +13/-0
Офлайн Офлайн

Сообщений: 156


Просмотр профиля
« : 06.06.2011, 11:06:19 »

Многие, а особенно - участники форумов, знают о баге работы буфера обмена в VISTA и Win-7: если скопировать в буфер обмена текст, содержащий символы кириллицы, не переключив перед копированием раскладку клавиатуры в RUS, то после вставки скопированного текста в ответ форума или "блокнот" вместо кириллических букв будут "кракозябры" типа:
Äîïîëíèòåëüíûå ñâåäåíèÿ ñì. â çàìåòêàõ î âûïóñêå

Для того, чтобы прочесть "сглюченный" таким образом текст, разработана функция пользователя:
Код:
Function ПОЧИНИТЬ_КИРИЛЛИЦУ(ГЛЮК$)
    '---------------------------------------------------------------------------------------
    ' Procedure    : ПОЧИНИТЬ_КИРИЛЛИЦУ
    ' Author       : The_Prist & Alex_ST
    ' DateTime     : 29.04.11, 09:52
    ' Topic_HEADER : Как прочесть "кракозябры", получаемые после копирования-вставки кириллицы из Висты?
    ' Topic_URL    : http://www.planetaexcel.ru/forum.php?thread_id=26894
    ' Purpose      : правит глюки типа Ýòà äîë  и другие "кракозябры" после вставки кириллицы из Vista
    ' Notes        :
    '---------------------------------------------------------------------------------------
    Dim Arr, i%, sTxt$, sSymb$
    'ГЛЮК = Replace(ГЛЮК, "&#", ";&#"): ГЛЮК = Replace(ГЛЮК, ";;", ";"):Arr = Split(ГЛЮК, ";")
    Arr = Split(Replace(Replace(ГЛЮК, "&#", ";&#"), ";;", ";"), ";")
    If UBound(Arr) > LBound(Arr) Then
       For i = LBound(Arr) To UBound(Arr)
          If Left(Arr(i), 2) = "&#" And IsNumeric(Mid(Arr(i), 3)) Then
             Arr(i) = CInt(Replace(Arr(i), "&#", ""))
             Arr(i) = Chr(IIf(Arr(i) > 256, Arr(i) - 848, Arr(i)))
          End If
       Next
       sTxt = Join(Arr, "")
    Else
       For i = 1 To Len(ГЛЮК)
          sSymb = Mid(ГЛЮК, i, 1)
          If AscW(sSymb) > 255 Then
             sTxt = sTxt & sSymb
          Else
             sTxt = sTxt & Chr(AscW(sSymb))
          End If
       Next i
    End If
    ПОЧИНИТЬ_КИРИЛЛИЦУ = sTxt
End Function

А для того, чтобы такие глюки не возникали при вашей работе, KukLP где-то нарыл следующий метод:
1. В папке system32 удаляем файл c_1252.nls
2. Там же делаем копию файла c_1251.nls и переименовываем её в c_1252.nls
3. Перезагружаемся. Проверяем. БАЛДЕЕМ!
Главная проблема - суметь удалить имеющийся файл c_1252.nls
Виста, маниакальная сволочь >( , не даёт это сделать даже администратору. А стать Full Admin я не сумел.
Зато по совету того же KukLP я попробовал удалить файл с помощью программы Unlocker - получилось!
« Последнее редактирование: 06.06.2011, 11:07:50 от Alex_ST » Записан

С уважением, Алексей
Alex_ST
Постоялец
***

Репутация: +13/-0
Офлайн Офлайн

Сообщений: 156


Просмотр профиля
« Ответ #1 : 14.06.2011, 11:44:56 »

А ещё можно прямо на рабочем столе создать файл скрипта VBA (обычный текстовой файл с расширением .vbs), содержащий такой код:
Код:
   'берет текст из буфера обмена и выводит сообщение с исправленным текстом
   Dim GLUK, Arr, i, sTxt, sSymb
   With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
      .GetFromClipboard: GLUK = .GetText   ' получить значение из буфера обмена
   End With
   Arr = Split(Replace(Replace(GLUK, "&#", ";&#"), ";;", ";"), ";")
   If UBound(Arr) > LBound(Arr) Then
      For i = LBound(Arr) To UBound(Arr)
         If Left(Arr(i), 2) = "&#" And IsNumeric(Mid(Arr(i), 3)) Then
            Arr(i) = CInt(Replace(Arr(i), "&#", ""))
            If Arr(i) > 256 Then Arr(i) = Arr(i) - 848
            Arr(i) = Chr(Arr(i))
         End If
      Next
      sTxt = Join(Arr, "")
   Else
      For i = 1 To Len(GLUK)
         sSymb = Mid(GLUK, i, 1)
         If AscW(sSymb) > 255 Then
            sTxt = sTxt & sSymb
         Else
            sTxt = sTxt & Chr(AscW(sSymb))
         End If
      Next
   End If
   GLUK = InputBox("", "", sTxt)
тогда будет достаточно скопировать искалеченный текст в буфер обмена и два раза кликнуть по этому скрипту. Скрипт выведет InputBox с раскодированным текстом.
« Последнее редактирование: 14.06.2011, 11:50:39 от Alex_ST » Записан

С уважением, Алексей
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru