Страницы: 1
RSS
Автоматическое копирование значения по времени
 
Здравствуйте,  
 
Помогите пожалуйста, у меня такой вопрос.  
Я получаю в Excel в одну и ту же ячеку данные из DDE сервера. Данные обновляются раз в секунду. То есть например в ячеку а1 раз в секунду записывается новое значение.  
Мне необходимо построить график тенденции например за неделю.  
Получается нужно копировать постоянно раз в минуту значение из ячейки а1, например вниз а2, через минуту скоприовать значение в а3 и т.д.    
Вроде не очень трудно, но я не знаю, что писать, чтобы копирование происходило по времени.  
Я в VB полный ноль. Подскажите пожалуйста, что нужно написать в макросе, для того чтобы постоянно раз в минуту копировать данные из одной и тойже ячеки в другие!  
 
С уважением Андрей.
 
См. приложение.    
 
Использовать пример можно без знаний VBA, но чтобы сознательно что-то поменять, придется подучиться.  
 
Ниже комментарии - для новичков VBA.  
Перед загрузкой примера макросы Excel должны быть разрешены: меню Сервис - Макрос - Безопасность - Низкая или средняя.  
 
Для наглядности в примере предполагается, что ввод данных периодически осуществляется любым способом в ячейку [B1].
 
Ниже автоматически заполняется история ввода данных по которым автоматически строится диаграмма.  
Данные можно сначала удалить, но не удаляйте заголовок.  
 
Подробнее нужно смотреть комментарии VBA-кода в модуля ЭтаКнига. Чтобы посмотреть код, нужно нажать Alt-F11 и в левом окне дважды кликнуть мышкой по модулю ЭтаКнига.  
 
В коде [B1] является ссылкой на ячейку ввода, а [A3] - левой титульной ячейкой отчетной таблицы.
При необходимости в коде можно вместо [B1] и [A3] записать другие адреса ячеек, в зависимости от компоновки листа.
 
Таблица истории данных должна отделяться хотя бы одной пустой строкой и колонкой от других данных.  
 
---  
ZVI
 
---  
В предыдущем варианте запись производилась каждый раз при изменении значения ячейки [B1].
 
А это вариант, когда запись в таблицу истории производится один раз в минуту, независимо от времени изменения [B1].
---  
ZVI
 
to ZVI  
Большое спасибо за помощь!!! ;)  
Пойду разбираться что да как.
 
Еще раз огромное спасибо за помощь! 2 вариант, где запись происходит раз в минуту, это то что мне и надо)))  
 
Но вот я попробовал добавить, второй параметр и все напутал и теперь VBA ругается((  
Я конечно постараюсь сам разобраться, но если не трудно где может быть моя ошибка?  
я попытался сделать хотябы тоже самое, но только на листе2 и не получается чтобы одновременно писало и там и там((
 
Извените за назойливость =)  
А еще хотелось бы узнать, какое максимальное количество строчек возможно на одном листе в Excel?  
Например, если я открою эту книгу и пойдет запись раз в минуту, насколько хватит листа? Есть ли ограничения?  
 
С уважением, Andruxa
 
{quote}{post}А еще хотелось бы узнать, какое максимальное количество строчек возможно на одном листе в Excel?{/post}{/quote}  
65536 строк в листе Excel-2003? хватит на 45 суток безпрерывной работы
 
Поправил код для 2-х листов - см. приложение.  
---  
ZVI
 
to ZVI  
Спасибо огромное!  
Буду разбираться))
 
Ребята, помогите пожалуйста. постигаю азы компеляции и программирования.    
 
Задача макроса  
   
На Лист1 В  ячейки B1 и С1 периодически пишутся данные, неважно откуда. Каждую минуту значения  [B1] и [С1] будут записываться в таблицу [БД]
 
Начиная со строки 3, данные сохраняются из B1 в В3 и до Bn, а из С1 в C3 и до Сn.  
 
Вот Тело Макроса, укажите,в чем моя ошибка:  
 
Sub ПоминутнаяЗапись()  
   
 Dim rng1 As Range, СтрокаДляЗаписи1 As Range, Sh1 As Worksheet, Target1 As Range  
 Dim rng2 As Range, СтрокаДляЗаписи2 As Range, Sh2 As Worksheet, Target2 As Range  
   
 ' Запустить вполнение этой процедуры через минуту еще раз (ежеминутный цикл)  
 Application.OnTime Now + TimeValue("00:01:00"), _  
                    "'" & ThisWorkbook.Name & "'!ЭтаКнига.ПоминутнаяЗапись"  
   
 ' Задать лист с ячейкой, значения которой каждую минуту нужно сохранять  
 Set Sh1 = Лист1  
 Set Sh2 = Лист1  
   
 ' Задать ячейки, значения которых каждую минуту нужно сохранять  
 Set Target1 = Sh1.[B1]
 Set Target2 = Sh2.[C1]
   
 ' Задать диапазон таблицы данных  
 Set rng1 = Sh1.[A3].CurrentRegion
 Set rng2 = Sh2.[A3].CurrentRegion
   
 ' Игнорировать ошибки, например, при достижении последней строки листа  
 On Error Resume Next  
   
 ' Отпределить последнюю строку для записи  
 Set СтрокаДляЗаписи1 = rng1.Rows(1).Offset(rng1.Rows.Count).Cells  
 Set СтрокаДляЗаписи2 = rng2.Rows(1).Offset(rng2.Rows.Count).Cells  
   
 ' Добавить в конец дату+время и значение  
 СтрокаДляЗаписи1(1, 1) = Now  
 СтрокаДляЗаписи1(1, 2) = Target1  
 СтрокаДляЗаписи2(1, 1) = Now  
 СтрокаДляЗаписи2(1, 3) = Target2  
   
 ' Переопределить именованный диапазон [‘Д]
 Sh1.Names.Add Name:="‘Д", RefersTo:="=" & rng1.CurrentRegion.Address  
 Sh2.Names.Add Name:="‘Д", RefersTo:="=" & rng2.CurrentRegion.Address  
   
 ' Переопределить диапазон данных диаграммы  
 Sh1.ChartObjects(1).Chart.SetSourceData Source:=Sh1.Range("‘Д")  
 Sh2.ChartObjects(1).Chart.SetSourceData Source:=Sh2.Range("‘Д")  
     
End Sub  
 
' Автозапуск цикла при открытии этой книги  
Private Sub Workbook_Open()  
 Call ПоминутнаяЗапись  
End Sub
 
См. приложение
 
Вопрос по вашему файлу- не работает. Вопрос в файле
 
Все работает, даже если копировать. Вы в ячейку B2 формулу вставили и при изменении значения, полученного формулой, у Вас не обновляются значения?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
В файле если менять вручную скажем ячейку K2, то меняется L2 и соответственно B1.  
НО!!  
строки истории не прописываются!  
Как сделать чтобы все работало если В1 ссылается на ячейку, где данные получаются в результате расчета формулы. Вобщем чтобы в примере при изменении К2 добавлялись строки истории.
 
Смотрим.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
работает. А как секунды добавить, а то изменения несколько раз в минуту бывают?
 
Переделал немного по-другому, чтобы при получении от DDE одного и того же значения менялась только дата-время последней записи, если 2 последних записанных значения одинаковые. Использован метод Диапазон.Dirty. Добавил старт-стопные кнопки. Время теперь с секундами, но это и сами могли бы сделать, поменяв формат ячеек столбца. Изменения в коде прокомментированы.
 
а если после считывания ячейку просто очищать?  
 
тогда можно воспользоваться sheet_change..
Живи и дай жить..
 
Ни в одном из прикреплённых примеров нет макрокоманд (из за давности они улетучились что ли?)  
Поделитесь если у кого то остался рабочий пример (больше всего меня интересует    
post_13397.rar, но посмотрел бы любой).  
Обидно, столько ZVI тут потратил времени а труды пропали.  
Спасибо.
 
Однако, нет причин для... В модуль эта книга -    
' ZVI:2008-03-30 http://www.planetaexcel.ru/forum.php?thread_id=3146  
 
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)  
   
 ' Если изменения произошли не на Листе1, то ничего не делать  
 If Sh.Name <> Лист1.Name Then Exit Sub  
   
 ' Если изменения произошли не в [B2], то ничего не делать
 If Target.Address <> [B1].Address Then Exit Sub
     
 ' ===== Записать историю изменения значений ячейки [B2] =====
  Dim rng As Range, СтрокаДляЗаписи As Range  
 ' Задать диапазон таблицы данных  
 Set rng = [A3].CurrentRegion
 ' Отпределить последнюю строку для записи  
 Set СтрокаДляЗаписи = rng.Rows(1).Offset(rng.Rows.Count).Cells  
 ' Добавить в конец дату+время и значение  
 СтрокаДляЗаписи(1, 1) = Now  
 СтрокаДляЗаписи(1, 2) = Target  
 ' Переопределить именованный диапазон [БД]
 Sh.Names.Add Name:="БД", RefersTo:="=" & rng.CurrentRegion.Address  
 ' Переопределить диапазон данных диаграммы  
 Sh.ChartObjects(1).Chart.SetSourceData Source:=Sh.Range("БД")  
   
End Sub
 
{quote}{login=oza}{date=24.04.2012 02:42}{thema=}{post}Ни в одном из прикреплённых примеров нет макрокоманд {/post}{/quote}Во всех приведённых примерах код есть. И никуда труды ZVI не пропали.
 
Народ!Помогите, не силен в программировании.  
Нужен мохожий макрос.  
Суть в чем.    
Имеется 2 рабочих листа. На первый копирую таблицу из интернет-ресурса раз в минуту. Не могу сделать так, чтобы она шла логом на втором листе. То есть копировалась так же, друг за другом,последовательно, но при этом удалялись одинаковые строки и сортировалась по одному из столбцов, чтобы потом просматривать необходимые данные через фильтр.    
 
Сейчас просто приходится копировать вручную, упорядочивать и фильтровать.  
 
Заранее очень признателен!
Страницы: 1
Наверх