Страницы: 1
RSS
Можно ли задавать время задержки в долях секунд?
 
Excel 2010. При открытии книги вывожу на экран форму и делаю задержку макроса на 3 секунды. Увидел такой вариант задержки с использованием цифры 86400, насколько я понимаю, это количество секунд в сутках.  А есть ли в VBA возможность регулировать время в долях секунды и как это можно сделать? Спасибо!
Код
Private Sub Workbook_Open()
frmTitle.Show (0)
frmTitle.Repaint
Application.Wait Time:=Now + 3 / 86400
Изменено: Leo Grig - 17.10.2018 20:51:48
 

Код
Declare Sub Sleep Lib "kernel32" (ByVal dwmilliseconds As Long)
Sub iDelay()
Sleep 500
End Sub

Изменено: Kuzmich - 17.10.2018 18:07:09
 
А для каких целей вообще задержка? Чтобы дать процессу отрисовать форму? Может так попробовать:
Код
Private Sub Workbook_Open()
frmTitle.Show 0
frmTitle.Repaint
DoEvents
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, спасибо, DoEvents очень помог, сейчас регулярно использую.
В моем примере задержка просто для появления заставки на 3 секунды.
А короткое появление формы (на полсекунды) хочу применять для быстрых операций, когда прогрессбар использовать бессмысленно, чтобы дать пользователю какой-то визуальный сигнал о том, что макрос выполнил работу.

Спасибо, Kuzmich, возьму на вооружение.
 
Цитата
Leo Grig написал:
чтобы дать пользователю какой-то визуальный сигнал о том, что макрос выполнил работ
А вывести MsgBox с информацией о завершении  работы макроса?
 
Цитата
Leo Grig написал:
чтобы дать пользователю какой-то визуальный сигнал о том, что макрос выполнил работу.
соглашусь с Юрий М,  В большинстве случаев это самый правильный подход, но если вдруг и правда нужно временно что-то показать  и нет желания рисовать форму, то через SHELL можно вызвать msg с параметрами (msg %username% /time:3 "Закончили упражнение!")  Можно по кнопке жмакнуть, а если нет то через 3 секунды само пропадет. ну разве что заголовок смущать будет, но кто его читает, и основной то текст редко :-)
По вопросам из тем форума, личку не читаю.
 
Цитата
Юрий М написал:
А вывести MsgBox с информацией о завершении  работы макроса?
Это потребует от пользователя сделать лишний клик или нажатие. А мне нужно приблизительно то, что описал БМВ. Сейчас подумал, что идеальным было бы решение, когда форма исчезает при шевелении мышки. Но боюсь, что такое мне не по силам:)
Спасибо!
Изменено: Leo Grig - 18.10.2018 16:42:03
 
Цитата
Leo Grig написал:
когда форма исчезает при шевелении мышки
или по взгляду :-), даже случайному. Скажем так , поймать фокус мыши и погасить форму не сложно, но отреагировать на шевеление - это на мой взгляд бесполезно, ибо сидит пользователь и косынку раскладывает пока  макрос работает, мышак то всегда задействован.
По вопросам из тем форума, личку не читаю.
 
По теме, - задержка тут не нужна

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

Код
Sub RunWithDelay(ByVal macroname$, Optional ByVal Delay As Double = 0.5)
    On Error Resume Next: Dim delay_txt$
    delay_txt$ = Replace(Format(CDbl(TimeSerial(0, 0, 1)) * Delay, "0.000000000"), ",", ".")
    ExecuteExcel4Macro "ON.TIME(NOW()+" & delay_txt$ & ", ""'" & ThisWorkbook.Name & "'!" & macroname$ & """)"
End Sub
 
Цитата
Leo Grig написал:
идеальным было бы решение, когда форма исчезает при шевелении мышки
Если шевеление мышки в пределах формы, то вообще всё просто.
 
off
Цитата
Юрий М написал:
Если шевеление мышки в пределах формы,
цап и обед :-)
По вопросам из тем форума, личку не читаю.
 
Угу )
 
если точность Вашего инструмента превышает измеряемые интервалы - они измеряются элементарно!
эксель позволяет измерять время в долях долей миллисекунд (как любая система умеющая оперировать с действительными числами)
одно из определений действительных чисел утврждает, что между двумя бесконечно близко расположенными действительными числами находится бесконечное множество действительных чисел. рассматривайте действительные числа не как дискретные величины, а как непрерывное поле чисел
удачи!
Изменено: Ігор Гончаренко - 18.10.2018 22:35:02
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Игорь, спасибо.
 
Можно так (заодно и проветрим):
Код
Sub Wait(ByVal ms)
  Dim t As Double
  t = Timer
  While Timer < t + ms / 1000
    DoEvents
  Wend
End Sub

Sub test()
  Wait 100
End Sub
Владимир
Страницы: 1
Наверх