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

Вход

Регистрация

Напомнить пароль

 

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

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Последовательный счетчик. (Макросы/Sub)
Последовательный счетчик.
Vertep7 Дата: Вторник, 08.08.2023, 18:29 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 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
со скоростью отсчета секунд
Это как?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
со скоростью отсчета секунд
Это как?

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

Excel 2007
Это как?


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


Сообщение отредактировал Vertep7 - Вторник, 08.08.2023, 18:37
 
Ответить
Сообщение
Это как?


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

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

Excel LTSC 2021 EN
Vertep7, Здравствуйте. А кто вам сказал
только не секундомер, так как он до 60 считает, и переводит остаток в минуты
???
На листе вставьте две кнопки Старт и Стоп и в стандартный модуль вставьте слудуйщий код:
[vba]
Код
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
[/vba]
Не проверял до

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


Ученик.
 
Ответить
СообщениеVertep7, Здравствуйте. А кто вам сказал
только не секундомер, так как он до 60 считает, и переводит остаток в минуты
???
На листе вставьте две кнопки Старт и Стоп и в стандартный модуль вставьте слудуйщий код:
[vba]
Код
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
[/vba]
Не проверял до

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

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

Excel 2007

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


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

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


Сообщение отредактировал Vertep7 - Вторник, 08.08.2023, 21:32
 
Ответить
Сообщение

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


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

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

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

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


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

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

Excel 2007
TimeValue("0:00:10")

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

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

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

Excel 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
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
нет прямой поддержки для выполнения кода в микросекундах

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

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

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

Excel LTSC 2021 EN
Vertep7, Я вам про
Application.OnTime
вы мне про

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


Ученик.
 
Ответить
СообщениеVertep7, Я вам про
Application.OnTime
вы мне про

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

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

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

Application.OnTime Now + TimeValue("00:00:03") / 2, "UpdateCounter"
потестил на TimeValue("00:00:10") /2, через 5 секунд менялось....
 
Ответить
Сообщение
Подскажите, а как реализовать все это в микросекундах, что бы выставить например 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
Группа: Проверенные
Ранг: Обитатель
Сообщений: 315
Репутация: 61 ±
Замечаний: 0% ±

Excel LTSC 2021 EN
потестил на TimeValue("00:00:10") /2, через 5 секунд менялось....
и достигли результат вывода в ячейку в
микросекундах
???


Ученик.
 
Ответить
Сообщение
потестил на TimeValue("00:00:10") /2, через 5 секунд менялось....
и достигли результат вывода в ячейку в
микросекундах
???

Автор - MikeVol
Дата добавления - 22.08.2023 в 21:43
cmivadwot Дата: Вторник, 22.08.2023, 23:21 | Сообщение № 14
Группа: Проверенные
Ранг: Обитатель
Сообщений: 457
Репутация: 86 ±
Замечаний: 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
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
потестил, через 5 секунд менялось....

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

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

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

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

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

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


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

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

начинал с 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
Группа: Пользователи
Ранг: Участник
Сообщений: 52
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
в порядке обмена опытом

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

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

Автор - Vertep7
Дата добавления - 27.08.2023 в 06:50
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Последовательный счетчик. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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