Страницы: 1
RSS
Макрос, отслеживающий изменения буфера обмена
 
Ребят, столкнулся с такой задачей:  
Есть программа, которая обрабатывает данные с внешнего прибора и в интервале 0,2-0,3 секунд получает новое значение, которое заносит в буфер. Нужно написать макрос, который заносил бы в таблицу значения с буфера обмена. Наверное, в идеале это макрос, который отслеживает изменения в буфере обмена и если таковое имеется, заносит в таблицу.  
Помогите написать макрос, плз!
 
Вот такой код можно запускать по таймеру или событию и заполнять лист или массив, если в переменной что-то есть:  
 
 
Sub GetFromClb()  
Dim tmp  
With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")  
.GetFromClipboard  
tmp = .GetText(1)  
End With  
End Sub
 
Ах да - если нужно определить изменения, то нужна публичная переменная, которая хранит предыдущее значение. Если текущее значение другое - то заменяем значение в этой переменной и выгружаем новое в массив.
 
А вот макрос, который запускает другой макрос несколько раз в секунду:  
http://excelvba.ru/code/UsefulCode  
 
 
Sub ЗапускМакросаСНебольшойЗадержкой() ' по мотивам макроса ZVI_Timer  
  ЗадержкаВСекундах = 0.3    ' в секундах  
  НазваниеМакроса$ = "test"    ' этот макрос будет запущен через 0.3 сек.  
  ЗадержкаВЧасах$ = Replace(Format(CDbl(TimeSerial(0, 0, 1)) * ЗадержкаВСекундах, "0.000000000"), ",", ".")  
   macro = "ON.TIME(NOW()+" & ЗадержкаВЧасах$ & ", """ & НазваниеМакроса$ & """)" ' формируем команду запуска  
  ExecuteExcel4Macro macro ' macro = ON.TIME(NOW()+0.000003472, "test")  
End Sub  
 
Комбинируете эти 2 макроса + простенький код записи результата в очередную ячейку, и всё готово
 
И вероятно лучше заполнять массив размером... ну может 1000 ячеек, и по заполнению выгружать его на лист.  
Так реже придётся определять место выгрузки (вернее можно вообще не определять), и выгрузка будет сравнима по времени с заполнением одной ячейки.  
Хотя конечно нужно тестить - может быть 100 ячеек...
 
Спасибо большое. Вроде разобрался
Страницы: 1
Читают тему
Наверх