Страница 1 из 2
Срочно!Как заполнить столбец значениями обновляемой ячейки?
Добавлено: 20 окт 2008, 15:12
Vaseninbox
Подскажите пожалуйста, срочно нужно найти решение!!!
В ячейку один раз в секунду по таймеру приходит новое числовое значение. Как последовательно заполнить столбец этими значениями,которые придут в эту ячейку в течение получаса??
Заранее спасибо!
Код таймера:
Код: Выделить всё
Sub timer_OnTimer()
Call Timer
timer_Start interval
End Sub
Sub Timer()
‘………………
End Sub
Sub timer_Start(ByVal interv As String)
interv = Application.Workbooks("Indexon.xls").Worksheets("Index").Range("D1").Value
interval = interv
next_time = DateAdd("s", interval, Time)
Application.OnTime next_time, "Лист3.timer_OnTimer"
End Sub
Re: Срочно!Как заполнить столбец значениями обновляемой ячейки?
Добавлено: 20 окт 2008, 16:19
Naeel Maqsudov
Код: Выделить всё
Dim DeadLine As Date
Const Tick = 1 '1 секунда
Sub StartForHalfAnHour() 'запустить на полчаса
Start 60 * 30
End Sub
Sub Start(ByVal Duration As Integer) 'запустить на Duration секунд
DeadLine = DateAdd("s", Duration, Now)
timer_OnTimer
End Sub
Sub timer_OnTimer() 'обработчкик события
Call Timer
If DeadLine >= Now Then
'пока не кончился период работы запланировать
'саму себя через Tick секунд
Application.OnTime DateAdd("s", Tick, Time), "timer_OnTimer"
End If
End Sub
Sub Timer() 'основная процедура
Range("A1").Offset(Application.WorksheetFunction.Count(Range("A:A")) + 1, 0).Value = Rnd
End Sub
Re: Срочно!Как заполнить столбец значениями обновляемой ячейки?
Добавлено: 21 окт 2008, 15:37
Vaseninbox
Большое спасибо за очень оперативный ответ!!! Всё работает..
Только иногда в обновляемую ячейку несколько раз попадают одинаковые числовые значения.Что следует поправить в коде,чтобы каждое следующее значение ячейки отличалось от предыдущей??
Re: Срочно!Как заполнить столбец значениями обновляемой ячейки?
Добавлено: 21 окт 2008, 17:15
EducatedFool
Только иногда в обновляемую ячейку несколько раз попадают одинаковые числовые значения.Что следует поправить в коде,чтобы каждое следующее значение ячейки отличалось от предыдущей??
Код: Выделить всё
Sub Timer() 'основная процедура
Dim ra As Range, NewValue
Set ra = Range("A1").Offset(Application.WorksheetFunction.Count(Range("A:A")), 0)
If ra.Value <> NewValue Then ra.Offset(1, 0).Value = NewValue
' если значение в последней ячейке ([B]ra.Value[/B]) отличается от [B]NewValue[/B], то в следующую ячейку записываем новое значение
End Sub
Re: Срочно!Как заполнить столбец значениями обновляемой ячейки?
Добавлено: 21 окт 2008, 19:19
Naeel Maqsudov
Vaseninbox писал(а):Только иногда в обновляемую ячейку несколько раз попадают одинаковые числовые значения.Что следует поправить в коде,чтобы каждое следующее значение ячейки отличалось от предыдущей??
Процедуру
Timer я привел так, чисто чтобы что-то делалось, так как не понял что подразумевалось под "новым числовым значением", которое "приходит" в ячейку по таймеру.
А какова вообще была исходная цель?
Получить случайные числа что ли?

Давайте уж, чтоб не задавать лишних вопросов опишите что требуется в итоге? Каков конечный результат?
Re: Срочно!Как заполнить столбец значениями обновляемой ячейки?
Добавлено: 22 окт 2008, 16:34
Vaseninbox
А какова вообще была исходная цель?
В ячейку (например .Cells(33, 7)) из торгового терминала каждую новую секунду скачивается новое значение котировки. Мне нужно было построить график этих значений.
Используя Вашу идею (свойство .Offset(сдвиг по строке, сдвиг по столбцу)), я немного переделал предложенный код под себя и сейчас всё работает как часы…Большое за это спасибо!!!
Только очередная проблема в том, что для нужного мне графика максимальная высота столбца равна 32000 строк. Как можно сделать так, чтобы при заполнении этих 32000 строк столбца «А» начиналось построение столбца «B», а после заполнения столбца «В» начинался строиться столбец «С»????
Re: Срочно!Как заполнить столбец значениями обновляемой ячейки?
Добавлено: 22 окт 2008, 17:35
EducatedFool
Как можно сделать так, чтобы при заполнении этих 32000 строк столбца «А» начиналось построение столбца «B», а после заполнения столбца «В» начинался строиться столбец «С»????
Один из возможных вариантов:
В начале модуля объявите переменные
Public CurrentRow As Long, CurrentColumn As Long
Перед началом записи в столбцы новых значений запустите код:
Код: Выделить всё
Sub FirstRun()
CurrentRow = 1: CurrentColumn = 1
End Sub
Измените основную процедуру на что-то вроде этого:
Код: Выделить всё
Sub Timer()
If Cells(CurrentRow, CurrentColumn).Value <> NewValue Then
CurrentRow = CurrentRow + 1
If CurrentRow > 32000 Then CurrentRow = 1: CurrentColumn = CurrentColumn + 1
Cells(CurrentRow, CurrentColumn).Value = NewValue
End If
End Sub
Срочно!Как заполнить столбец значениями обновляемой ячейки?
Добавлено: 23 окт 2008, 12:26
Vaseninbox
Dim ra As Range, NewValue
Почему-то не могу объявить переменную
ra как
Range. Обычно тип переменной автоматически выделяется соответствующим цветом, а в моём случае - обычным - чёрным. И далее компилятор выдаёт ошибку как раз в месте ссылки на объект:
Код: Выделить всё
Set ra = Range("A1").Offset(Application.WorksheetFunction.Count(Range("A:A")), 0)
Ошибка:
"Type mismach" (может в написании немного ошибся, Sorry) )
Наверное, предполагается, что тип каких-то переменных определён неверно.
Из-за чего такое может быть?
Re: Срочно!Как заполнить столбец значениями обновляемой ячейки?
Добавлено: 23 окт 2008, 15:18
EducatedFool
Обычно тип переменной автоматически выделяется соответствующим цветом
Почему-то не могу объявить переменную ra как Range
По умолчанию он не выделяется цветом (по крайней мере у меня в Excel 2003)
Попробуйте ввести
Dim ra as , VBA сам предложит список типов, из списка и выберите
Range
В слово
Range, возможно, попала одна из букв русского алфавита...
Ошибка: "Type mismach" тоже может быть обусловлена этим.
Re: Срочно!Как заполнить столбец значениями обновляемой ячейки?
Добавлено: 06 ноя 2008, 18:48
Одиночка
Я с котировками пытаюсь другой макрос написать, который будет из текущей котировки вычитать 0.0005 и результат копиравть в буфер обмена. и так с каждым новым тиком. Запись вестись никакая не будет, только динамическое вычисление и копирование в буфер.
Тоже возникли некоторые трудности, создал здесь соответствующую тему.