Срочно!Как заполнить столбец значениями обновляемой ячейки?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Vaseninbox
Сообщения: 34
Зарегистрирован: 05 сен 2008, 15:11
Контактная информация:

Подскажите пожалуйста, срочно нужно найти решение!!!

В ячейку один раз в секунду по таймеру приходит новое числовое значение. Как последовательно заполнить столбец этими значениями,которые придут в эту ячейку в течение получаса??

Заранее спасибо!

Код таймера:

Код: Выделить всё

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 
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Код: Выделить всё

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

Vaseninbox
Сообщения: 34
Зарегистрирован: 05 сен 2008, 15:11
Контактная информация:

Большое спасибо за очень оперативный ответ!!! Всё работает..
Только иногда в обновляемую ячейку несколько раз попадают одинаковые числовые значения.Что следует поправить в коде,чтобы каждое следующее значение ячейки отличалось от предыдущей??
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Только иногда в обновляемую ячейку несколько раз попадают одинаковые числовые значения.Что следует поправить в коде,чтобы каждое следующее значение ячейки отличалось от предыдущей??

Код: Выделить всё

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
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Vaseninbox писал(а):Только иногда в обновляемую ячейку несколько раз попадают одинаковые числовые значения.Что следует поправить в коде,чтобы каждое следующее значение ячейки отличалось от предыдущей??


Процедуру Timer я привел так, чисто чтобы что-то делалось, так как не понял что подразумевалось под "новым числовым значением", которое "приходит" в ячейку по таймеру.
А какова вообще была исходная цель?
Получить случайные числа что ли? :)
Давайте уж, чтоб не задавать лишних вопросов опишите что требуется в итоге? Каков конечный результат?
Vaseninbox
Сообщения: 34
Зарегистрирован: 05 сен 2008, 15:11
Контактная информация:

А какова вообще была исходная цель?
В ячейку (например .Cells(33, 7)) из торгового терминала каждую новую секунду скачивается новое значение котировки. Мне нужно было построить график этих значений.

Используя Вашу идею (свойство .Offset(сдвиг по строке, сдвиг по столбцу)), я немного переделал предложенный код под себя и сейчас всё работает как часы…Большое за это спасибо!!!

Только очередная проблема в том, что для нужного мне графика максимальная высота столбца равна 32000 строк. Как можно сделать так, чтобы при заполнении этих 32000 строк столбца «А» начиналось построение столбца «B», а после заполнения столбца «В» начинался строиться столбец «С»????
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Как можно сделать так, чтобы при заполнении этих 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
Vaseninbox
Сообщения: 34
Зарегистрирован: 05 сен 2008, 15:11
Контактная информация:

Dim ra As Range, NewValue
Почему-то не могу объявить переменную ra как Range. Обычно тип переменной автоматически выделяется соответствующим цветом, а в моём случае - обычным - чёрным. И далее компилятор выдаёт ошибку как раз в месте ссылки на объект:

Код: Выделить всё

Set ra = Range("A1").Offset(Application.WorksheetFunction.Count(Range("A:A")), 0)
Ошибка: "Type mismach" (может в написании немного ошибся, Sorry) )
Наверное, предполагается, что тип каких-то переменных определён неверно.

Из-за чего такое может быть?
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Обычно тип переменной автоматически выделяется соответствующим цветом
Почему-то не могу объявить переменную ra как Range
По умолчанию он не выделяется цветом (по крайней мере у меня в Excel 2003)
Попробуйте ввести Dim ra as , VBA сам предложит список типов, из списка и выберите Range

В слово Range, возможно, попала одна из букв русского алфавита...
Ошибка: "Type mismach" тоже может быть обусловлена этим.
Одиночка
Сообщения: 11
Зарегистрирован: 04 ноя 2008, 01:44

Я с котировками пытаюсь другой макрос написать, который будет из текущей котировки вычитать 0.0005 и результат копиравть в буфер обмена. и так с каждым новым тиком. Запись вестись никакая не будет, только динамическое вычисление и копирование в буфер.
Тоже возникли некоторые трудности, создал здесь соответствующую тему.
Ответить