Версия для слабовидящих
Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

 

= Мир MS Excel/Последовательный счетчик. - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Последовательный счетчик.
Vertep7 Дата: Вторник, 08.08.2023, 18:29 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Здравствуйте. Подскажите пожалуйста код счетчика (не таймера, не секундомера) Его функция - это последовательно выводить число в ячейке от 0 до 1000 например, со скоростью отсчета секунд. А по достижению крайнего значения останавливаться. Ну и желательно две кнопки включить и выключить. Везде рассматриваются примеры таймеров как часы, а мне необходима именно линейная сменяемость цифр. Спасибо.
 
Ответить
СообщениеЗдравствуйте. Подскажите пожалуйста код счетчика (не таймера, не секундомера) Его функция - это последовательно выводить число в ячейке от 0 до 1000 например, со скоростью отсчета секунд. А по достижению крайнего значения останавливаться. Ну и желательно две кнопки включить и выключить. Везде рассматриваются примеры таймеров как часы, а мне необходима именно линейная сменяемость цифр. Спасибо.

Автор - Vertep7
Дата добавления - 08.08.2023 в 18:29
Serge_007 Дата: Вторник, 08.08.2023, 18:32 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата Vertep7, 08.08.2023 в 18:29, в сообщении № 1 ( писал(а)):
со скоростью отсчета секунд
Это как?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата Vertep7, 08.08.2023 в 18:29, в сообщении № 1 ( писал(а)):
со скоростью отсчета секунд
Это как?

Автор - Serge_007
Дата добавления - 08.08.2023 в 18:32
Vertep7 Дата: Вторник, 08.08.2023, 18:36 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Цитата Serge_007, 08.08.2023 в 18:32, в сообщении № 2 ( писал(а)):
Это как?


1, 2, 3, 4, 5, ..........., 1000. В одной ячейке. Как секундомер, только не секундомер, так как он до 60 считает, и переводит остаток в минуты.


Сообщение отредактировал Vertep7 - Вторник, 08.08.2023, 18:37
 
Ответить
Сообщение
Цитата Serge_007, 08.08.2023 в 18:32, в сообщении № 2 ( писал(а)):
Это как?


1, 2, 3, 4, 5, ..........., 1000. В одной ячейке. Как секундомер, только не секундомер, так как он до 60 считает, и переводит остаток в минуты.

Автор - Vertep7
Дата добавления - 08.08.2023 в 18:36
MikeVol Дата: Вторник, 08.08.2023, 19:27 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 454
Репутация: 108 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Vertep7, Здравствуйте. А кто вам сказал
Цитата Vertep7, 08.08.2023 в 18:36, в сообщении № 3 ( писал(а)):
только не секундомер, так как он до 60 считает, и переводит остаток в минуты
???
На листе вставьте две кнопки Старт и Стоп и в стандартный модуль вставьте слудуйщий код:

Option Explicit
Dim countValue      As Integer
Dim isRunning       As Boolean

Sub StartCounter()
    
    If Not isRunning Then
        isRunning = True
        countValue = 0
        UpdateCounter
    End If

End Sub

Sub StopCounter()
    isRunning = False
End Sub

Sub UpdateCounter()
    
    If isRunning Then
        Range("A1").Value = countValue    ' Замените "A1" на ячейку, в которую нужно выводить значение
        countValue = countValue + 1
        
        If countValue <= 1000 Then
            Application.OnTime Now + TimeValue("00:00:01"), "UpdateCounter"
        Else
            isRunning = False
        End If
    
    End If

End Sub


Не проверял до
Цитата Vertep7, 08.08.2023 в 18:36, в сообщении № 3 ( писал(а)):
1000

но до 267 дотянул я. Дальше сами проверяйте. Удачи.


Ученик.
Одесса - Украина
 
Ответить
СообщениеVertep7, Здравствуйте. А кто вам сказал
Цитата Vertep7, 08.08.2023 в 18:36, в сообщении № 3 ( писал(а)):
только не секундомер, так как он до 60 считает, и переводит остаток в минуты
???
На листе вставьте две кнопки Старт и Стоп и в стандартный модуль вставьте слудуйщий код:
[vba]
Option ExplicitDim countValue      As IntegerDim isRunning       As BooleanSub StartCounter()        If Not isRunning Then        isRunning = Тrue        countValue = 0        UpdateCounter    End IfEnd SubSub StopCounter()    isRunning = FalseEnd SubSub UpdateCounter()        If isRunning Then        Range("A1").Value = countValue    ' Замените "A1" на ячейку; в которую нужно выводить значение        countValue = countValue + 1                If countValue <= 1000 Then            Application.OnTime Now + ТimeValue("00:00:01"); "UpdateCounter"        Else            isRunning = False        End If        End IfEnd Sub
[/vba]
Не проверял до
Цитата Vertep7, 08.08.2023 в 18:36, в сообщении № 3 ( писал(а)):
1000

но до 267 дотянул я. Дальше сами проверяйте. Удачи.

Автор - MikeVol
Дата добавления - 08.08.2023 в 19:27
Vertep7 Дата: Вторник, 08.08.2023, 21:12 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Цитата MikeVol, 08.08.2023 в 19:27, в сообщении № 4 ( писал(а)):

но до 267 дотянул я. Дальше сами проверяйте. Удачи.


Вы мастер своего дела, все работает как положено, нареканий нет. Сохраню себе полезная вещь)

Единственно еще вопрос, как можно уменьшить темп переключений. Подключил к своим таблицам для фильтрации данных, но чето проскальзывает, видимо темп все-таки быстрый. При каждом переключении идет видимо небольшое подвисание Экселя и когда эти затыки накладываются друг на друга, сбиваются условия. Как мне это представляется. И после минуты работы начинает собирать мне всякую чушь)
Попробовал использовать Sleep и еще вот это Application.Wait Time:=Now + TimeValue("0:00:01"), работает, только система повисает напрочь и варится сама в себе, с листом работать не возможно.


Сообщение отредактировал Vertep7 - Вторник, 08.08.2023, 21:32
 
Ответить
Сообщение
Цитата MikeVol, 08.08.2023 в 19:27, в сообщении № 4 ( писал(а)):

но до 267 дотянул я. Дальше сами проверяйте. Удачи.


Вы мастер своего дела, все работает как положено, нареканий нет. Сохраню себе полезная вещь)

Единственно еще вопрос, как можно уменьшить темп переключений. Подключил к своим таблицам для фильтрации данных, но чето проскальзывает, видимо темп все-таки быстрый. При каждом переключении идет видимо небольшое подвисание Экселя и когда эти затыки накладываются друг на друга, сбиваются условия. Как мне это представляется. И после минуты работы начинает собирать мне всякую чушь)
Попробовал использовать Sleep и еще вот это Application.Wait Time:=Now + TimeValue("0:00:01"), работает, только система повисает напрочь и варится сама в себе, с листом работать не возможно.

Автор - Vertep7
Дата добавления - 08.08.2023 в 21:12
cmivadwot Дата: Вторник, 08.08.2023, 22:01 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 604
Репутация: 115 ±
Замечаний: 0% ±

365
Цитата Vertep7, 08.08.2023 в 21:12, в сообщении № 5 ( писал(а)):
Единственно еще вопрос, как можно уменьшить темп переключений.
10 секунд TimeValue("0:00:10") И если параллельно работают макросы ...Отключить им обновления экрана для ускорения работы макроса? Отключение обновления экрана для ускорения работы макроса
К сообщению приложен файл: tajmer_schetchik.xlsm (18.8 Kb)


Сообщение отредактировал cmivadwot - Среда, 09.08.2023, 00:16
 
Ответить
Сообщение
Цитата Vertep7, 08.08.2023 в 21:12, в сообщении № 5 ( писал(а)):
Единственно еще вопрос, как можно уменьшить темп переключений.
10 секунд TimeValue("0:00:10") И если параллельно работают макросы ...Отключить им обновления экрана для ускорения работы макроса? Отключение обновления экрана для ускорения работы макроса

Автор - cmivadwot
Дата добавления - 08.08.2023 в 22:01
Vertep7 Дата: Вторник, 22.08.2023, 15:10 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Цитата cmivadwot, 08.08.2023 в 22:01, в сообщении № 6 ( писал(а)):
TimeValue("0:00:10")

Подскажите, а как реализовать все это в микросекундах, что бы выставить например 1,5 секунды?
 
Ответить
Сообщение
Цитата cmivadwot, 08.08.2023 в 22:01, в сообщении № 6 ( писал(а)):
TimeValue("0:00:10")

Подскажите, а как реализовать все это в микросекундах, что бы выставить например 1,5 секунды?

Автор - Vertep7
Дата добавления - 22.08.2023 в 15:10
MikeVol Дата: Вторник, 22.08.2023, 17:14 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 454
Репутация: 108 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Vertep7, Здравствуйте. Насколько мне известно в Microsoft Excel и VBA нет прямой поддержки для выполнения кода в микросекундах. Обычно минимальное временное разрешение, которое можно использовать с помощью Application.OnTime, составляет одну секунду. Я не встречал такого кода ещё, может кто из Опытных тут вам что и подскажут. Посмотрим.


Ученик.
Одесса - Украина
 
Ответить
СообщениеVertep7, Здравствуйте. Насколько мне известно в Microsoft Excel и VBA нет прямой поддержки для выполнения кода в микросекундах. Обычно минимальное временное разрешение, которое можно использовать с помощью Application.OnTime, составляет одну секунду. Я не встречал такого кода ещё, может кто из Опытных тут вам что и подскажут. Посмотрим.

Автор - MikeVol
Дата добавления - 22.08.2023 в 17:14
Serge_007 Дата: Вторник, 22.08.2023, 17:29 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
В микросекундах не знаю (наверное только если обычные секунды делить), а в миллисекундах можно: Get Milliseconds or Seconds from System Time with VBA


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеВ микросекундах не знаю (наверное только если обычные секунды делить), а в миллисекундах можно: Get Milliseconds or Seconds from System Time with VBA

Автор - Serge_007
Дата добавления - 22.08.2023 в 17:29
Vertep7 Дата: Вторник, 22.08.2023, 17:58 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Цитата MikeVol, 22.08.2023 в 17:14, в сообщении № 8 ( писал(а)):
нет прямой поддержки для выполнения кода в микросекундах

Ну почему же. Например в команде Sleep(500) ожидание 0.5 секунд, можно и меньше сделать.
 
Ответить
Сообщение
Цитата MikeVol, 22.08.2023 в 17:14, в сообщении № 8 ( писал(а)):
нет прямой поддержки для выполнения кода в микросекундах

Ну почему же. Например в команде Sleep(500) ожидание 0.5 секунд, можно и меньше сделать.

Автор - Vertep7
Дата добавления - 22.08.2023 в 17:58
MikeVol Дата: Вторник, 22.08.2023, 18:09 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 454
Репутация: 108 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Vertep7, Я вам про
Цитата MikeVol, 22.08.2023 в 17:14, в сообщении № 8 ( писал(а)):
Application.OnTime
вы мне про
Цитата Vertep7, 22.08.2023 в 17:58, в сообщении № 10 ( писал(а)):
Sleep

Как думаете, есть разница?


Ученик.
Одесса - Украина
 
Ответить
СообщениеVertep7, Я вам про
Цитата MikeVol, 22.08.2023 в 17:14, в сообщении № 8 ( писал(а)):
Application.OnTime
вы мне про
Цитата Vertep7, 22.08.2023 в 17:58, в сообщении № 10 ( писал(а)):
Sleep

Как думаете, есть разница?

Автор - MikeVol
Дата добавления - 22.08.2023 в 18:09
cmivadwot Дата: Вторник, 22.08.2023, 18:53 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 604
Репутация: 115 ±
Замечаний: 0% ±

365
Цитата Vertep7, 22.08.2023 в 15:10, в сообщении № 7 ( писал(а)):
Подскажите, а как реализовать все это в микросекундах, что бы выставить например 1,5 секунды?

Application.OnTime Now + TimeValue("00:00:03") / 2, "UpdateCounter"
потестил на TimeValue("00:00:10") /2, через 5 секунд менялось....
 
Ответить
Сообщение
Цитата Vertep7, 22.08.2023 в 15:10, в сообщении № 7 ( писал(а)):
Подскажите, а как реализовать все это в микросекундах, что бы выставить например 1,5 секунды?

Application.OnTime Now + TimeValue("00:00:03") / 2, "UpdateCounter"
потестил на TimeValue("00:00:10") /2, через 5 секунд менялось....

Автор - cmivadwot
Дата добавления - 22.08.2023 в 18:53
MikeVol Дата: Вторник, 22.08.2023, 21:43 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 454
Репутация: 108 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Цитата cmivadwot, 22.08.2023 в 18:53, в сообщении № 12 ( писал(а)):
потестил на TimeValue("00:00:10") /2, через 5 секунд менялось....
и достигли результат вывода в ячейку в
Цитата Vertep7, 22.08.2023 в 15:10, в сообщении № 7 ( писал(а)):
микросекундах
???


Ученик.
Одесса - Украина
 
Ответить
Сообщение
Цитата cmivadwot, 22.08.2023 в 18:53, в сообщении № 12 ( писал(а)):
потестил на TimeValue("00:00:10") /2, через 5 секунд менялось....
и достигли результат вывода в ячейку в
Цитата Vertep7, 22.08.2023 в 15:10, в сообщении № 7 ( писал(а)):
микросекундах
???

Автор - MikeVol
Дата добавления - 22.08.2023 в 21:43
cmivadwot Дата: Вторник, 22.08.2023, 23:21 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 604
Репутация: 115 ±
Замечаний: 0% ±

365
MikeVol, вопрос был про 1,5 секунды.. если 10 секунд поделилось на 2 и стало меняться через 5 секунд, то при делении 3 секунд... предположительно меняется через 1,5 секунды не? за 60 секунд натикало 38 .. 38*1,5=57 ну наверно погрешность есть)))))))))))))визуально отслеживалось, что переключение шло то быстрей, то медленней) 1,5 секунды это и есть 1 целая секунда и еще 1 секунда /2..... а Микросекунда - это единица измерения времени, равная 0,000001 (одной миллионной) доле секунды (10 в -6). предполагаю, что Vertep7 не правильно описал желание получить 1,5 секунды упомянув микросекунды. Не на что не претендую)))))


Сообщение отредактировал cmivadwot - Среда, 23.08.2023, 00:08
 
Ответить
СообщениеMikeVol, вопрос был про 1,5 секунды.. если 10 секунд поделилось на 2 и стало меняться через 5 секунд, то при делении 3 секунд... предположительно меняется через 1,5 секунды не? за 60 секунд натикало 38 .. 38*1,5=57 ну наверно погрешность есть)))))))))))))визуально отслеживалось, что переключение шло то быстрей, то медленней) 1,5 секунды это и есть 1 целая секунда и еще 1 секунда /2..... а Микросекунда - это единица измерения времени, равная 0,000001 (одной миллионной) доле секунды (10 в -6). предполагаю, что Vertep7 не правильно описал желание получить 1,5 секунды упомянув микросекунды. Не на что не претендую)))))

Автор - cmivadwot
Дата добавления - 22.08.2023 в 23:21
Vertep7 Дата: Среда, 23.08.2023, 08:15 | Сообщение № 15
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Цитата cmivadwot, 22.08.2023 в 18:53, в сообщении № 12 ( писал(а)):
потестил, через 5 секунд менялось....

Вчера опробовал, все работает. Быстро и элегантно. Это однозначно лайк! respect

Был еще один рабочий способ, но я не хотел его использовать, так как пришлось бы переписывать код и вносить еще много строк.
И да, все верно, не микросекунды а миллисекунды, ошибка. Но вы и так поняли)
 
Ответить
Сообщение
Цитата cmivadwot, 22.08.2023 в 18:53, в сообщении № 12 ( писал(а)):
потестил, через 5 секунд менялось....

Вчера опробовал, все работает. Быстро и элегантно. Это однозначно лайк! respect

Был еще один рабочий способ, но я не хотел его использовать, так как пришлось бы переписывать код и вносить еще много строк.
И да, все верно, не микросекунды а миллисекунды, ошибка. Но вы и так поняли)

Автор - Vertep7
Дата добавления - 23.08.2023 в 08:15
Serge_007 Дата: Среда, 23.08.2023, 09:17 | Сообщение № 16
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата Vertep7, 23.08.2023 в 08:15, в сообщении № 15 ( писал(а)):
миллисекунды, ошибка
Микросекунды тоже существуют
Цитата
Микросекунда - это единица измерения времени, равная 0,000001 (одной миллионной) доле секунды (10 - 6) или 0,001 (одной тысячной) миллисекунды


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата Vertep7, 23.08.2023 в 08:15, в сообщении № 15 ( писал(а)):
миллисекунды, ошибка
Микросекунды тоже существуют
Цитата
Микросекунда - это единица измерения времени, равная 0,000001 (одной миллионной) доле секунды (10 - 6) или 0,001 (одной тысячной) миллисекунды

Автор - Serge_007
Дата добавления - 23.08.2023 в 09:17
Gustav Дата: Среда, 23.08.2023, 12:30 | Сообщение № 17
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Возвращаясь к собственно счетчику, в порядке обмена опытом. Я в своей реализации (см. файл) пошёл несколько иным путем - не увеличиваю счётчик на количество секунд задержки между вызовами OnTime, а просто проверяю сколько прошло секунд с момента старта счетчика (момент запомнен в классе) и получившуюся разницу кладу в контрольную ячейку, обновляя значение счетчика. И такую проверку/обновление я делаю в нескольких местах: в методе OnTime c интервалом 10 секунд и в двух событиях рабочего листа SelectionChange и Activate.

Т.е. если не работать с листом, а сидеть и смотреть на него, не шевеля мышкой и не мигая, то счетчик меняет значение каждые 10 секунд. А если проявлять активность, то счётчик меняется практически с каждым действием пользователя. Кроме того, в рамках учебной задачи значение в ячейке всегда можно принудительно обновить кнопкой "обновить".

Назначение остальных кнопок:
"старт" - запускает счётчик, т.е. обнуляет значение в контрольной ячейке A1 и запоминает момент времени старта;
"стоп" - останавливает счётчик, значение в контрольной ячейке сохраняется и больше не изменяется, серия запусков OnTime прекращается;
"сбросить" - обнуляет счётчик, который продолжает работать дальше, но новые значения вычисляются уже от момента сброса.
К сообщению приложен файл: CCounter.xlsm (27.9 Kb)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеВозвращаясь к собственно счетчику, в порядке обмена опытом. Я в своей реализации (см. файл) пошёл несколько иным путем - не увеличиваю счётчик на количество секунд задержки между вызовами OnTime, а просто проверяю сколько прошло секунд с момента старта счетчика (момент запомнен в классе) и получившуюся разницу кладу в контрольную ячейку, обновляя значение счетчика. И такую проверку/обновление я делаю в нескольких местах: в методе OnTime c интервалом 10 секунд и в двух событиях рабочего листа SelectionChange и Activate.

Т.е. если не работать с листом, а сидеть и смотреть на него, не шевеля мышкой и не мигая, то счетчик меняет значение каждые 10 секунд. А если проявлять активность, то счётчик меняется практически с каждым действием пользователя. Кроме того, в рамках учебной задачи значение в ячейке всегда можно принудительно обновить кнопкой "обновить".

Назначение остальных кнопок:
"старт" - запускает счётчик, т.е. обнуляет значение в контрольной ячейке A1 и запоминает момент времени старта;
"стоп" - останавливает счётчик, значение в контрольной ячейке сохраняется и больше не изменяется, серия запусков OnTime прекращается;
"сбросить" - обнуляет счётчик, который продолжает работать дальше, но новые значения вычисляются уже от момента сброса.

Автор - Gustav
Дата добавления - 23.08.2023 в 12:30
Vertep7 Дата: Воскресенье, 27.08.2023, 06:50 | Сообщение № 18
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Цитата Gustav, 23.08.2023 в 12:30, в сообщении № 17 ( писал(а)):
в порядке обмена опытом

Тоже интересная задумка, где-то кому-то сможет пригодится) Считать активность пользователя например.
 
Ответить
Сообщение
Цитата Gustav, 23.08.2023 в 12:30, в сообщении № 17 ( писал(а)):
в порядке обмена опытом

Тоже интересная задумка, где-то кому-то сможет пригодится) Считать активность пользователя например.

Автор - Vertep7
Дата добавления - 27.08.2023 в 06:50
  • Страница 1 из 1
  • 1
Поиск:

Рейтинг@Mail.ru Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!