Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2023, 22:40   #1
Xalyf
Новичок
Джуниор
 
Регистрация: 21.04.2023
Сообщений: 3
Печаль clipboard мониторинг, чтение.

Приветствую, сообщество. Мой дебют на этом форуме. После двух дней экспериментов, понимаю, мне нужна ваша помощь.
Пытаюсь реализовать в 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 не получилось
Помогите пожалуйста.
Xalyf вне форума Ответить с цитированием
Старый 21.04.2023, 23:56   #2
Xalyf
Новичок
Джуниор
 
Регистрация: 21.04.2023
Сообщений: 3
По умолчанию

Вот рабочий пример с циклом проверки буфера обмена. он стабильно работает, если пауза в две и больше секунд. Если паузу выставить в одну секунду между проверками буфера обмена, свалится в ошибку. Встаете в любую ячейку и нажимаете кнопку мониторинга, идете в другое приложение и копируете текст, что бы завершить цикл, скопируйте строку в два символа. Конечно можно остановиться на двух секундах. Но хочется достичь идеала. И потом скорость копирования в буфер обмена с листа, точно может быть быстрее двух секунд. И тогда пропуск копирования буфера обмена обеспечен. Помогите разобраться с ошибкой или выстроить на втором примере с отслеживанием события изменения буфера обмена, не мониторя каждую секунду.
Буду так же благодарен за подсказку. При нажатии на кнопку запускается цикл проверки буфера обмена и сам лист excel становится недоступным, пока не скопировать в буфер два символа. А как сделать выполняемый код независимым (работающим в фоне)? И завершать, например по нажатию той же кнопки?
Вложения
Тип файла: zip clipboard.zip (16.7 Кб, 5 просмотров)
Xalyf вне форума Ответить с цитированием
Старый 24.04.2023, 13:54   #3
Xalyf
Новичок
Джуниор
 
Регистрация: 21.04.2023
Сообщений: 3
По умолчанию

Всем спасибо. Подсказали на соседнем форуме. Переписал работу с clipboard на WinAPI минуя DataObject и все заработало без ошибок.
Xalyf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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