Здравствуйте. Подскажите пожалуйста код счетчика (не таймера, не секундомера) Его функция - это последовательно выводить число в ячейке от 0 до 1000 например, со скоростью отсчета секунд. А по достижению крайнего значения останавливаться. Ну и желательно две кнопки включить и выключить. Везде рассматриваются примеры таймеров как часы, а мне необходима именно линейная сменяемость цифр. Спасибо.
Здравствуйте. Подскажите пожалуйста код счетчика (не таймера, не секундомера) Его функция - это последовательно выводить число в ячейке от 0 до 1000 например, со скоростью отсчета секунд. А по достижению крайнего значения останавливаться. Ну и желательно две кнопки включить и выключить. Везде рассматриваются примеры таймеров как часы, а мне необходима именно линейная сменяемость цифр. Спасибо.Vertep7
но до 267 дотянул я. Дальше сами проверяйте. Удачи.
Вы мастер своего дела, все работает как положено, нареканий нет. Сохраню себе полезная вещь)
Единственно еще вопрос, как можно уменьшить темп переключений. Подключил к своим таблицам для фильтрации данных, но чето проскальзывает, видимо темп все-таки быстрый. При каждом переключении идет видимо небольшое подвисание Экселя и когда эти затыки накладываются друг на друга, сбиваются условия. Как мне это представляется. И после минуты работы начинает собирать мне всякую чушь) Попробовал использовать Sleep и еще вот это Application.Wait Time:=Now + TimeValue("0:00:01"), работает, только система повисает напрочь и варится сама в себе, с листом работать не возможно.
но до 267 дотянул я. Дальше сами проверяйте. Удачи.
Вы мастер своего дела, все работает как положено, нареканий нет. Сохраню себе полезная вещь)
Единственно еще вопрос, как можно уменьшить темп переключений. Подключил к своим таблицам для фильтрации данных, но чето проскальзывает, видимо темп все-таки быстрый. При каждом переключении идет видимо небольшое подвисание Экселя и когда эти затыки накладываются друг на друга, сбиваются условия. Как мне это представляется. И после минуты работы начинает собирать мне всякую чушь) Попробовал использовать Sleep и еще вот это Application.Wait Time:=Now + TimeValue("0:00:01"), работает, только система повисает напрочь и варится сама в себе, с листом работать не возможно.Vertep7
Сообщение отредактировал Vertep7 - Вторник, 08.08.2023, 21:32
Vertep7, Здравствуйте. Насколько мне известно в Microsoft Excel и VBA нет прямой поддержки для выполнения кода в микросекундах. Обычно минимальное временное разрешение, которое можно использовать с помощью Application.OnTime, составляет одну секунду. Я не встречал такого кода ещё, может кто из Опытных тут вам что и подскажут. Посмотрим.
Vertep7, Здравствуйте. Насколько мне известно в Microsoft Excel и VBA нет прямой поддержки для выполнения кода в микросекундах. Обычно минимальное временное разрешение, которое можно использовать с помощью Application.OnTime, составляет одну секунду. Я не встречал такого кода ещё, может кто из Опытных тут вам что и подскажут. Посмотрим.MikeVol
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 секунды упомянув микросекунды. Не на что не претендую)))))
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
Сообщение отредактировал cmivadwot - Среда, 23.08.2023, 00:08
Вчера опробовал, все работает. Быстро и элегантно. Это однозначно лайк!
Был еще один рабочий способ, но я не хотел его использовать, так как пришлось бы переписывать код и вносить еще много строк. И да, все верно, не микросекунды а миллисекунды, ошибка. Но вы и так поняли)
Вчера опробовал, все работает. Быстро и элегантно. Это однозначно лайк!
Был еще один рабочий способ, но я не хотел его использовать, так как пришлось бы переписывать код и вносить еще много строк. И да, все верно, не микросекунды а миллисекунды, ошибка. Но вы и так поняли) Vertep7
Возвращаясь к собственно счетчику, в порядке обмена опытом. Я в своей реализации (см. файл) пошёл несколько иным путем - не увеличиваю счётчик на количество секунд задержки между вызовами OnTime, а просто проверяю сколько прошло секунд с момента старта счетчика (момент запомнен в классе) и получившуюся разницу кладу в контрольную ячейку, обновляя значение счетчика. И такую проверку/обновление я делаю в нескольких местах: в методе OnTime c интервалом 10 секунд и в двух событиях рабочего листа SelectionChange и Activate.
Т.е. если не работать с листом, а сидеть и смотреть на него, не шевеля мышкой и не мигая, то счетчик меняет значение каждые 10 секунд. А если проявлять активность, то счётчик меняется практически с каждым действием пользователя. Кроме того, в рамках учебной задачи значение в ячейке всегда можно принудительно обновить кнопкой "обновить".
Назначение остальных кнопок: "старт" - запускает счётчик, т.е. обнуляет значение в контрольной ячейке A1 и запоминает момент времени старта; "стоп" - останавливает счётчик, значение в контрольной ячейке сохраняется и больше не изменяется, серия запусков OnTime прекращается; "сбросить" - обнуляет счётчик, который продолжает работать дальше, но новые значения вычисляются уже от момента сброса.
Возвращаясь к собственно счетчику, в порядке обмена опытом. Я в своей реализации (см. файл) пошёл несколько иным путем - не увеличиваю счётчик на количество секунд задержки между вызовами OnTime, а просто проверяю сколько прошло секунд с момента старта счетчика (момент запомнен в классе) и получившуюся разницу кладу в контрольную ячейку, обновляя значение счетчика. И такую проверку/обновление я делаю в нескольких местах: в методе OnTime c интервалом 10 секунд и в двух событиях рабочего листа SelectionChange и Activate.
Т.е. если не работать с листом, а сидеть и смотреть на него, не шевеля мышкой и не мигая, то счетчик меняет значение каждые 10 секунд. А если проявлять активность, то счётчик меняется практически с каждым действием пользователя. Кроме того, в рамках учебной задачи значение в ячейке всегда можно принудительно обновить кнопкой "обновить".
Назначение остальных кнопок: "старт" - запускает счётчик, т.е. обнуляет значение в контрольной ячейке A1 и запоминает момент времени старта; "стоп" - останавливает счётчик, значение в контрольной ячейке сохраняется и больше не изменяется, серия запусков OnTime прекращается; "сбросить" - обнуляет счётчик, который продолжает работать дальше, но новые значения вычисляются уже от момента сброса.Gustav