Страницы: 1
RSS
Некорректная работа буфера обмена.
 
Доброго времени суток!
Уважаемые форумчане, второй день бьюсь над проблемой и никак не могу ее решить.
Есть простой код работы с буфером обмена:
Код
Sub SetClipboardText()                                 'Запись в буфер обмена
    Dim MyData As DataObject, txt As String

    txt = "Проверка данных"
    
    Set MyData = New DataObject
    MyData.SetText txt                                              'Запись в буфер обмена
    MyData.PutInClipboard
    
    MyData.GetFromClipboard
    txt = MyData.GetText(1)
    Debug.Print txt
End Sub
Работает он определенно странно((
Если макрос работает без остановки, результат в окне Immediate:
Код
Проверка данных
Но как только приостановить макрос (F9) на строке
Код
txt = MyData.GetText(1)
Дальнейшее продолжение работы макроса в ручном режиме (F8) выдает следующий результат Immediate (два вопросительных знака):
Код
??
Умом понимаю, что проблема не в Excel вроде.
Решения по поиску не найдено, пробовал отключать антивирус, Skype, PuntoSwitcher и тд. Не помогло.

Может кто-то уже сталкивался с такой проблемой и знает решение?
Или есть иные способы сохранения информации помимо использования библиотеки Microsoft Forms 2.0 Object Library.
Изменено: Aleksey - 28.08.2016 19:27:04
 
Для Экса Microsoft Forms 2.0 Object Library является внешней, читай сторонней. Поэтому в режиме отладки возможны косяки, как с функциями API. ИМХО.
Изменено: kuklp - 28.08.2016 20:06:16
Я сам - дурнее всякого примера! ...
 
Проблему решил.
Оказывается сразу после сохранения переменной в буфер у меня стояла команда на проигрывание звука.
Код
Call StartSound("ir_inter.wav", 2)
Именно она и устраивала эти проблемы, причем основательно.
Убрал ее, час теста - полет нормальный.
Вдруг кому-нибудь пригодится.
Изменено: Aleksey - 07.09.2016 00:23:11
 
Цитата
Или есть иные способы сохранения информации помимо использования библиотеки Microsoft
есть:
обьявить переменную соответсвующего типа,
записать в нее значение,
извлекать значение столько раз сколько потребуется (до полного удовлетворения)
дополнительно можете почитать о цикле жизни переменных, чтобы обьявить ее в правильном месте и правильным способом
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Именно она и устраивала эти проблемы, причем основательно.
не угадали
у меня в одной из программ тоже используется буфер обмена - там такая же ерунда (2 квадратика в буфере обмена)
причем, проявляется не на всех компах (примерно на половине компов. проверено на сотнях компов)
пару часов потратил на поиск проблемы - не нашел (думал, какая-то программа перехватывает буфер обмена, - но нет, иногда на чистой винде та же проблема)

я в своём макросе в цикле (до 10 раз, чтобы не зациклилось) записывал одно и то же значение в буфер обмена,
каждый раз проверяя содержимое буфера обмена - совпадает ли с записываемым значением
И проблема стала проявляться реже, - только в 5-10% случаев (иногда с первого раза в буфер обмена попадает то, что надо, а иногда с 3-7 раза)
Страницы: 1
Читают тему
Наверх