А причем кодировка и некорректное отображение, если на любою входную строку- числовую или символьную, любой длинны из буфера возвращает два символа "?" с кодом 63?
Цитата
Oleg Boyaroff написал: Если в редакторе кода попробовать написать на кириллице, будет нормально отображаться или в виде белиберды?
в IDE кириллица набирается норм., вставляется криво - вопросами.
Потому что у вас проблема как раз в отображении кодировки. Если нет, то проверьте локально что передается свойству MyDataObj.SetText из ActiveCell.Value.
Цитата
Столбенко Владислав написал: если на любою входную строку- числовую или символьную, любой длинны из буфера возвращает два символа "?" с кодом 63 ?
Этого указано не было.
Как себя поведет этот кусок кода?
Код
With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
.SetText ActiveCell.Text
.PutInClipboard
End With
Исходя из своего опыта по использованию этого кода на 5000 разных компьютеров, могу сказать следующее:
1) копирование с использованием DataObject работает в 80-90% случаев Проблемы в основном с новыми версиями windows (начиная с win7)
2) вероятная причина проблемы - перехват буфера обмена чем-то в Windows Потому что если макрос зациклить, проверяя буфер обмена после каждого копирования, то выяснится, что после 7-10 попыток копирования нужный результат в буфере обмена появится с вероятностью более 90% (при одной попытке - с вероятностью около 30-40%) Т.е. проблема плавающая (то работает, то нет)
3) попытки решить проблему не увенчались успехом (в течение 2 часов ковырялся с проблемным компом, не нашел ничего что перехватывает буфер)
4) сейчас планирую решить эту проблему в своей программе окончательно, и за 4 года размышлений надумал 2 способа, которые могут помочь: (ни один из способов пока не проверял, ибо на моём компе всё копируется и без этих ухищрений)
Способ 1: перекодировать строку перед копированием через DataObject Вероятно, что проблема в кодировке исходной строки (например, поменять 1251 на 1250) Это несколько строк кода
Способ 2: как рекомендуется в одной из тем по ссылкам выше, использовать WinAPI Должно сработать, но кода много (нужно писать в 2 вариантах - для win32 и win64)
Игорь, спасибо за обстоятельный ответ. Итак, если у автора темы 32-разрядный офис, то можно попробовать проверить "Способ 2". Для этого нужно скопировать макросы из ссылки и заменить в #1 текст на
sokol92 написал: Как себя поведет этот кусок кода?
Ничего не изменилось. Почитал предоставленные sokol92 ссылки. Это просто 3,14, -блуждающий глюк! Буду решать танцами с бубнами на тему Copy и РasteSpecial.
Цитата
sokol92 написал: Итак, если у автора темы 32-разрядный офис
Владислав, вложил вариант функций SetClipboard и GetClipboard, который должен работать во всех версиях офиса. Проверил на Excel 2016 (32- ru) и Excel 2016 (64- En). Проверьте, пожалуйста, вдруг свершится чудо?
Да, все заработало! Огромное спасибо! DataObject у меня также продолжает некорректно вставлять в буфер. Т.е. у меня это не блуждающий глюк, а вполне себе стабильный.
Игорь написал: Способ 2: как рекомендуется в одной из тем по ссылкам выше, использовать WinAPIДолжно сработать, но кода много (нужно писать в 2 вариантах - для win32 и win64)
Коллеги, не удержался… даже зарегистрировался на форуме .
Во-первых, спасибо вам большое за подсказку на решение проблемы (Майкрософт сначала создала эту проблему, а потом её решила… хоть и костылём, но метод всё же рабочий) .
Во-вторых, я периодически сталкивался с подобным поведением буфера обмена на одном компьютере, плакал, но продолжал мучиться… просто выполнял макросы на другом компе… пока не столкнулся с проблемой и на втором. Не выдержав, стал рыть инет.
Оказывается, проблема совсем не нова. Вот здесь, например, с проблемой столкнулись аж в 2013 году , решить так и не смогли… но человек нашёл метод 100% воспроизведения проблемы копирования в буфер… Ей оказалась банальное присутствие в системе открытых окон эксплорера.
Я проверил, - так и есть: если открыто хоть одно окно эксплорера, буфер не заполняется; как только все окна эксплорера закрыть (даже Excel не обязательно трогать), буфер начинает работать как надо . В чём более глубокая причина - не в курсе, но эта информация - хоть что-то!