Как сделать таймер в visual basic

Обновлено: 04.07.2024

Репутация: 19
Всего: 99

Элемент управления Timer (таймер) используется для выполнения действия через определенный промежуток времени. Основное свойство элемента - Interval - задает интервал времени, определяющий, как часто таймер должен уведомлять приложение. Свойство Interval задается в миллисекундах (1000 миллисекунд = 1 секунде). Хочется отметить, что максимально возможное значение данного свойства равно 65 секундам.
Единственное событие таймера - Timer. Для того, чтобы как работает это событие, создайте новый проект, поместите на форму элемент Timer. Установите значение Interval равным 1000 (1 секунда). В событие Timer1_Timer вставьте следующий код:

Запустите проект. Вы можете наблюдать, как через промежуток времени, равный 1 секунде меняется заголовок формы на текущее время вашего компьютера. Но если вы поставите значение Interval таймера равным 2000 или 10000, то заголовок формы будет меняться через 2 или 10 секунд.

Далее показаны несколько примеров использования таймера.

Этот пример покажет, как можно реализовать функцию ожидания в VB. Вначале поместите на форму таймер (Timer1) и установите его свойство Enabled = False. Для тестирования процедуры добавьте две метки (Label1 и Label2) и командную кнопку (Command1) к форме. Напишите следующую подпрограмму и код события Timer для таймера:

Код

Public Sub Wait(seconds)
Timer1.Enabled = True 'включение таймера
Timer1.Interval = 1000 * seconds 'установка интервала для таймера
While Timer1.Interval > 0
DoEvents
Wend
Timer1.Enabled = False ' выключение таймера
End Sub

Код

Private Sub Command1_Click()
Label1.Caption = Now
Wait (5)
Label2.Caption = Now
End Sub

К примеру, необходимо чтобы каждые две минуты происходило какое-либо событие

Недостатком данного метода является добавление в вашу программу дополнительных переменных. К тому же данная программа испытывалась в режиме тестирования, когда нагрузки на компьютер не было. И непонятно, как поведет себя эта программа в реальном режиме работы.

Код

Dim n As Long, s As Long
Private Sub Form_Load()
n = 1
End Sub

Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

[ Время генерации скрипта: 0.1057 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Каждой процедуре отводится один лист.
На листе расположен текст процедуры с цветным выделением длинных операторов и циклов. Из коментариев операторов формируется оглавление. В приложении приведены публикации MatLab.

Программа позволяет наглядно отобразить информацию о процессе заряда.
Основная информация появляется на подгруженном аккумуляторе через некоторое время.
В приложении приведены аналоги на MatLab. Содержание диаграмм MatLab можно реализовать и здесь.

Excel Наименование листов это помещения и полки. На листе ограничиваем ячейки по конфигурации помещения. Записываем в ячейки что лежит. На листе "Список_инвер" нажимаем левый рисунок - все собирается и по алфавиту.
Наводим на нужную ячейку, нажимаем на правый рисунок и мы на листе с подсветкой что искали.

Нажмите, чтобы узнать подробности

Хочу рассказать как можно в Excel использовать таймеры. Как ни странно, но они очень часто применяются, например, при составлении тестов, когда необходимо дать определённое время на выполнение теста. Или необходимость запускать автосохранение книги через каждые 5 минут. А так же во многих других случаях.

Запуск макроса через определённое время
Таймер. Application.OnTime


Хочу рассказать как можно в Excel использовать таймеры. Как ни странно, но они очень часто применяются, например, при составлении тестов, когда необходимо дать определённое время на выполнение теста. Или необходимость запускать автосохранение книги через каждые 5 минут. А так же во многих других случаях. Делается таймер при помощи команды

Application.OnTime

Запуск макроса через некоторое время


Продемонстрирую на примере простейшего кода:

Application.OnTime Now + TimeValue("00:00:03"), "Proc"

MsgBox "Время вышло!", vbInformation, "Пример таймера"

В этом примере таймер задаётся в процедуре Procedura_1(), а вот процедура Proc() выполняется через заданный промежуток времени. В данном случае тут отсчитывается 3 секунды от текущей даты Now + TimeValue("00:00:03").
Оператор Now в данном случае является переменной, которая несёт в себе полную информацию, т.е. число, месяц, год, часы, минуты, секунды. Это хорошо заметно при пошаговом выполнении макроса.


Дальше идёт прибавление некоторого значения к текущему времени Now + TimeValue("00:00:03"). В данном случае мы к текущей дате прибавили всего 3 секунды.
И после того как мы задали время, через запятую, указываем имя самого макроса, который должен выполниться "Proc".

При этом если Вам не нужны такие большие точности, т.е. год, месяц и т.д., то Вы вполне можете заменить оператор Now на Time, который хранит в себе только время.


Теперь понятно, что макрос "Proc" выполнится через 3 секунды после макроса Procedura_1.

Хочу обратить внимание, что TimeValue("00:00:03") можно заменить на TimeSerial(0, 0, 3) и предыдущую процедуру можно записать так:

Application.OnTime Time + TimeSerial(0, 0, 3), "Proc"


Из скриншота видно, что цифры через запятую обозначают часы, минуты и секунды.

Запуск макроса в заданное время


Теперь рассмотрим такой случай когда необходимо, чтобы макрос сработал в заданное время. Например в 18:00. Делается это по аналогии с предыдущей записью, только мы упускаем оператор Now или Time.

Application.OnTime TimeValue("18:00:00"), "Proce"

MsgBox "Время пришло!", vbInformation, "Пример таймера"

При такой записи процедура Proce() выполнится в 18:00 вечера.

Отмена таймера

Ну вот. Всё вроде хорошо. Но вдруг мы передумали и нам теперь не надо запускать этот макрос в 18:00 вечера. Отменить данную команду можно при помощи команды Schedule:=False, которая отменяет запуск указанного макроса. Например:

Application.OnTime TimeValue("18:00:00"), "Proce"

Application.OnTime TimeValue("18:00:00"), "Proce", Schedule:=False

MsgBox "Время пришло!", vbInformation, "Пример таймера"

В этом случае у нас есть макрос который включает таймер - Zapusk, и макрос который отключает таймер -Otmena.

Если запустить макрос Zapusk, то в 18:00 у нас выполнится макрос Proce. А вот если до 18:00 выполнить макрос Otmena, то макрос Proce не запустится.

Зацикливание таймера


Ну вот мы и подошли к вопросу как сделать автосохранение книги, или внесение каких-то определённых данных через заданный промежуток времени. Сделать это просто.

Application.OnTime Time + TimeSerial(0, 0, 5), "Proc"

MsgBox "Время вышло!", vbInformation, "Пример таймера"

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

Public sostoyanie As Boolean

Application.OnTime Time + TimeSerial(0, 0, 5), "Proc"

MsgBox "Время вышло!", vbInformation, "Пример таймера"

If sostoyanie = True Then Procedura_2

В этом случае запуск макроса осуществляется процедурой Procedura_2_Zapusk, а его остановка процедуройProcedura_2_Otmena.

Событие возникающее при открытии и закрытии книги

Открытие книги. Workbook_Open

Рассмотрим событие, которое возникает при открытии книги. Я бы сказал, что это очень важное событие при составлении программ. Например, для того чтобы сразу придать нужное оформление нашему документу, или запустить какой-нибудь макрос, который запрашивает логин и пароль.

Делается это следующим образом. Заходим в окно VB, щёлкаем слева по книге "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке Open.


После этого появится следующие начало и конец макроса, который и будет срабатывать при открытии книги.

Private Sub Workbook_Open()

Private Sub Workbook_Open()

MsgBox "Привет " & Application.UserName, vbInformation, "Приветствие"


Закрытие книги. Workbook_BeforeClose

Рассмотрим событие, которое возникает при закрытии книги, если быть точнее, то перед закрытием.

Заходим в окно VB, щёлкаем слева по книге "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке BeforeClose.


После этого появится следующие начало и конец макроса, который и будет срабатывать перед закрытием книги.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Private Sub Workbook_BeforeClose(Cancel As Boolean)

MsgBox "Прощай " & Application.UserName, vbInformation, "Прощание"


Событие возникающее при сохранении книги

Макрос срабатывающий перед сохранением книги.
Workbook_BeforeSave

Рассмотрим событие, которое возникает при попытке сохранения книги. Это очень удобно, если Вам необходимо выполнить какое-то действие прежде чем книга будет сохранена, например, занести в таблицу данные о компьютере с которого было внесено изменение и сохранение книги.

Делается это следующим образом. Заходим в окно VB, щёлкаем слева по книге "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке BeforeSave.


После этого появится следующие начало и конец макроса, который и будет срабатывать при открытии книги.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

MsgBox "Вы сохраняете книгу", vbInformation, "Сохранение"

Возможно даже сохранить книгу своим способом или отменить её сохранение.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Res = MsgBox("Вы хотите сохранить эту книгу?", vbQuestion + vbYesNo, "Сохранение")

If Res = vbNo Then Cancel = True

Если пользователь в этом макросе откажется от сохранения, то книга не будет сохраняться, так как происходит отмена сохранения посредством переменной Cancel = True.

Макрос срабатывающий после сохранения книги.
Workbook_AfterSave

Теперь посмотрим на событие, которое возникает после сохранения книги. Заходим в окно VB, щёлкаем слева по книге "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке AfterSave.


После этого появится следующие начало и конец макроса, который и будет срабатывать после сохранения книги.

Private Sub Workbook_AfterSave(ByVal Success As Boolean)

Private Sub Workbook_AfterSave(ByVal Success As Boolean)

MsgBox "Книга успешно сохранена", vbInformation, "Отчёт"

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

Public Tm As Date, Res As Double

'Макрос срабатывающий перед сохранением книги

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Res = MsgBox("Вы хотите сохранить эту книгу?", vbQuestion + vbYesNo, _

If Res = vbNo Then Cancel = True

'Макрос срабатывающий после сохранения книги

Private Sub Workbook_AfterSave(ByVal Success As Boolean)

Dim T As Integer

If Res = vbNo Then

T = (Time - Tm) * 24 * 60 * 60 'Время в секундах

MsgBox "Книга успешно сохранена за " & T & " секунд!", vbInformation, _

Событие книги
Правая и левая кнопка мыши


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

В событии с книгой всё аналогично, поэтому я не буду много уделять времени. Только хочу уточнить одну деталь. Если в предыдущих уроках мы рассматривали команды которые имеют своё влияние только на лист, то в макросе события книги, он действует на всю книгу и на все листы.

Двойной щелчок левой кнопки мыши

Выбираем ЭтаКнига, в левом окошке выбираем Workbook, в правом окошке выбираемSheetBeforeDoubleClick, как показано на скриншоте ниже.


После этого появится следующие начало и конец макроса, который и будет срабатывать при двойном щелчке мыши по ячейкам любого листа.

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _

ByVal Target As Range, Cancel As Boolean)

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _

ByVal Target As Range, Cancel As Boolean)

MsgBox "Вы произвели двойное нажатие ЛКМ", vbInformation, "Пример"

Для того чтобы не входить в режим редактирования добавляем в коде Cancel = True

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _

ByVal Target As Range, Cancel As Boolean)

MsgBox "Вы произвели двойное нажатие ЛКМ", vbInformation, "Пример"


Правая кнопка мыши

Теперь посмотрим на событие, которое возникает на всех листах книги, при нажатии на правую кнопку мыши. Заходим в окно VB, щёлкаем слева по книге "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке SheetBeforeRightClick.


После этого появится следующие начало и конец макроса, который и будет срабатывать после нажатия на ПКМ.

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _

ByVal Target As Range, Cancel As Boolean)

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _

ByVal Target As Range, Cancel As Boolean)

MsgBox "Вы произвели нажатие ПКМ", vbInformation, "Пример"


Можно сделать и так, чтобы при нажатии на правую кнопку мыши удалялась строка, над которой находится курсор.

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _

ByVal Target As Range, Cancel As Boolean)

MsgBox "Строка удалена!", vbExclamation, "Пример"

Как отличить текст от числа?
Целое или дробное? Чётное или нечётное?
Остаток от деления

Текст или число?

При написании программы с возможностью ручного ввода данных , очень часто возникает необходимость отличить какие именно данные введены - текст или число? Предположим вы пишите программу, которая запрашивает от пользователя ввести число от 0 до 50, но пользователь не знает цифр и вместо этого пишет в поле ввода данных - батон. И после таких данных наша программа выдаст окно VB с ошибкой, так как нам надо было число или цифру, а не текст. И для того, чтобы такого не происходило я покажу Вам как отличить что именно ввёл пользователь - число или текст.
Делается это при помощи проверочной команды:

где a - это проверяемая переменная (текст, цифра, число).
Данная команда может принимать только два значение - False или True (если запись будет выглядеть так: b=IsNumeric(a)).

Напишем простенькую программку, которая будет определять введённые данные.

Dim a As Variant 'описываем переменную

a = InputBox("Введите текст или число.", "Ввод данных")

If a = "" Then Exit Sub 'Если данных не введено, то выходим из процедуры

If IsNumeric(a) Then 'проверяем число или текст

MsgBox "Вы ввели число!", vbInformation, "Число"

MsgBox "Вы ввели текст или смешанные данные!", vbInformation, _

Как работают все представленные в уроке программы можно посмотреть на небольшом видеоролике.

Остаток числа (модуль)

Теперь научимся определять остаток числа при делении. Делается это при помощи оператора Mod, другими словами - модуль, но не путайте с математическим понятием модуля. Синтаксис записи его следующий:

А вот теперь надо понять что происходит при такой записи. Объясняю логику работы данного модуля:
Первым делом это значение a делится на значение b. Если деление произошло без остатка (например, 4:2 или 9:3), то в результате запишетсяc = 0. В противном случае, если при делении образуется остаток (например, 9:2 - остаток 1, 9:5 - остаток 4), то c будет равно остатку (при этом, если остаток не целый, то он округляется, например 15:6.3=2, остаток 2.4 - округляем в большую сторону получается 3.
Рассмотрим как это будет выглядеть програмно. Напишем простенькую программу, которая нам будет определять округлённый остаток.

a = InputBox("Введите первое число A в выражении C = A Mod B.", "Ввод данных")

b = InputBox("Введите второе число B в выражении C = A Mod B.", "Ввод данных")

MsgBox a & " Mod " & b & "= " & c, vbInformation, "Модуль"

Как отличить целое число от дробного?

Этот вопрос волновал многих людей, которые работаю с большими табличными данными. И очень часто возникал вопрос: Как отличить дробное число от целого?
Теперь Вы это узнаете. Делается это при помощи простого оператора Int или Fix.

А вот чем они отличаются это мы сейчас и увидим на простом примере.

a = InputBox("Введите любое дробное число через запятую, например 68,8", _

MsgBox "Int(a) Fix(a) = " & c, vbInformation, "Целое"

Ниже представлена таблица, при помощи которой можно легко понять в чём различие этих двух операторов.

Я пытаюсь использовать таймер для обратного отсчета от указанного времени, которое я выбираю, с разделением времени на минуты и секунды в формате MM: SS , а затем останавливаюсь, когда время достигает 00 : 00 .

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

Например, обратный отсчет от 120 секунд;

02:00 > 02:59 > 02:58 > 02:57 > 02:56 > 02:55

А затем при продолжении обратного отсчета прошедших 90 секунд в том же тесте;

02:30 > 01:29 > 01:28 > 01:27 > 01:26 > 01:25

Вот мой код для моего таймера счета;

Вот мой код для функции форматирования времени;

А вот мой код для загрузки формы;

В верхней части моего публичного класса, поэтому я могу ввести указанное время в таймер обратного отсчета. Вероятно, это что-то невероятно глупое, и я не могу понять, что это такое.

Любая помощь приветствуется и, пожалуйста, имейте в виду, я новичок в программировании и легко меняю большие стены кода. (Я с трудом понимаю функцию как она есть.)

Читайте также: