![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 21.04.2023
Сообщений: 3
|
![]()
Приветствую, сообщество. Мой дебют на этом форуме. После двух дней экспериментов, понимаю, мне нужна ваша помощь.
Пытаюсь реализовать в Excel следующую задачу. В файле excel нужно прописать vda код, который бы позволил мониторить буфер обмена Windows. И в случае изменения в буфере обмена, извлекать из него текст. В работе это должно выглядеть так, пользователь открыл и свернул в трей пустую таблицу excel (с тем самым кодом мониторинга cliboard). Дальше, пользователь работает с любыми другими ресурсами (web, документы и прочие), в этих других приложениях пользователь может выборочно выделять и копировать текстовые фрагменты. При копировании в буфер обмена, код в excel должен видеть изменения происходящие в буфере обмена (текстовая составляющая) и последовательно в столбец таблицы excel вставлять скопированный текст. Остановить мониторинг можно отправкой в буфер например короткой строки в один символ, или типа того. Вроде бы ничего сложного. Изучил вопрос. https://vremya-ne-zhdet.ru/vba-excel/bufer-obmena/ Попытался тупо мониторить в бесконечном цикле с задержкой в секунду (https://excelvba.ru/code/clipboard), почти получилось, но регулярно валится в ошибку при последующих попытках прочитать буфер обмена error -2147221040 (800401d0). ошибка мутная, толком по ней ничего нет. А что есть, не помогает решить проблему. Тогда решил пойти другим путем. Решил отказаться от циклической проверки буфера обмена и воспользоваться событиями изменения буфера обмена. Нашел вот такую ветку с фрагментом кода VBA https://www.vbforums.com/showthread....rd-for-changes Но адаптировать его под Excel не получилось ![]() Помогите пожалуйста. |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 21.04.2023
Сообщений: 3
|
![]()
Вот рабочий пример с циклом проверки буфера обмена. он стабильно работает, если пауза в две и больше секунд. Если паузу выставить в одну секунду между проверками буфера обмена, свалится в ошибку. Встаете в любую ячейку и нажимаете кнопку мониторинга, идете в другое приложение и копируете текст, что бы завершить цикл, скопируйте строку в два символа. Конечно можно остановиться на двух секундах. Но хочется достичь идеала. И потом скорость копирования в буфер обмена с листа, точно может быть быстрее двух секунд. И тогда пропуск копирования буфера обмена обеспечен. Помогите разобраться с ошибкой или выстроить на втором примере с отслеживанием события изменения буфера обмена, не мониторя каждую секунду.
Буду так же благодарен за подсказку. При нажатии на кнопку запускается цикл проверки буфера обмена и сам лист excel становится недоступным, пока не скопировать в буфер два символа. А как сделать выполняемый код независимым (работающим в фоне)? И завершать, например по нажатию той же кнопки? |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 21.04.2023
Сообщений: 3
|
![]()
Всем спасибо. Подсказали на соседнем форуме. Переписал работу с clipboard на WinAPI минуя DataObject и все заработало без ошибок.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
clipboard | krGorka | Общие вопросы Delphi | 2 | 19.05.2016 14:33 |
Clipboard | АлександрDelphi | Общие вопросы Delphi | 10 | 30.03.2016 00:24 |
Как извлечь DIB из Clipboard? | vag2005 | Общие вопросы .NET | 0 | 02.04.2010 22:41 |
Clipboard | [Qj] | Общие вопросы .NET | 1 | 21.08.2009 18:50 |