Как дать задержку времени менее одной секунды в excel vba? Vba задержка времени
excel-vba - Как дать задержку времени менее одной секунды в excel vba?
надеюсь, вам понравится.
изменить:
здесь один без каких-либо дополнительных функций, для людей, которым нравится это быстрее
Public Sub WaitTime(Days As Double, Hours As Double, Minutes As Double, Seconds As Double) If Days - Fix(Days) > 0 Then Hours = Hours + (Days - Fix(Days)) * 24 Days = Fix(Days) End If If Hours - Fix(Hours) > 0 Then Minutes = Minutes + (Hours - Fix(Hours)) * 60 Hours = Fix(Hours) End If If Minutes - Fix(Minutes) > 0 Then Seconds = Seconds + (Minutes - Fix(Minutes)) * 60 Minutes = Fix(Minutes) End If If Seconds >= 60 Then Seconds = Seconds - 60 Minutes = Minutes + 1 End If If Minutes >= 60 Then Minutes = Minutes - 60 Hours = Hours + 1 End If If Hours >= 24 Then Hours = Hours - 24 Days = Days + 1 End If Application.Wait _ ( _ Now + _ TimeSerial(Hours + Days * 24, Minutes, 0) + _ Seconds * TimeSerial(0, 0, 1) _ ) End Subqaru.site
vba - Доступ /Excel VBA - Задержка времени
Заметка:
- Обновить таблицы в Excel, связанные с базой данных Access
-
Таблицы в Excel необходимо обновить, например, Test_Sheet1, Test_Sheet2, Test_Sheet3
-
Доступ к файлам Excel осуществляется несколькими пользователями
Вопрос
В Access vba, если используется файл excel (только для чтения), как я могу реализовать задержку в коде доступа vba, чтобы дождаться, когда файл будет прочитан/записан, чтобы он мог продолжить работу с кодом (обновить таблицы, сохранить/закрыть файл). Обратите внимание, что файлы Excel лучше обновлять по порядку.
Я действительно выполнял дескриптор ошибки с задержкой по времени, поэтому, если номер ошибки = 1004, то задержка на X. Это действительно не работа.
Задержки времени в VBA
Function RefreshExcelTables() Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.workbooks.Open "c:\test\Test_Sheet1.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet2.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet3.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close Set ExcelApp = Nothing End Function
Обновить
Function RefreshExcelTables() On Error GoTo Error Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.workbooks.Open "c:\test\Test_Sheet1.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet2.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet3.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close Error: If Err.Number = 1004 Then call pause(5) Resume End If Set ExcelApp = Nothing End Function Public Function Pause(intSeconds As Integer) Dim dblStart As Double If intSeconds > 0 Then dblStart = Timer() Do While Timer < dblStart + intSeconds Loop End If End Function задан Elixir 11 мая '15 в 20:53 источник поделитьсяКак дать задержку времени менее одной секунды в excel vba? [excel-vba]
Вы можете использовать вызов API и Sleep:
Поместите это вверху вашего модуля:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Затем вы можете вызвать его в следующей процедуре:
Sub test() Dim i As Long For i = 1 To 10 Debug.Print Now() Sleep 500 'wait 0.5 seconds Next i End Subвызвать waitfor (.005)
Sub WaitFor(NumOfSeconds As Single) Dim SngSec as Single SngSec=Timer + NumOfSeconds Do while timer < sngsec DoEvents Loop End subИсходные временные задержки в VBA
Public Function CheckWholeNumber(Number As Double) As Boolean If Number - Fix(Number) = 0 Then CheckWholeNumber = True End If End Function Public Sub TimeDelay(Days As Double, Hours As Double, Minutes As Double, Seconds As Double) If CheckWholeNumber(Days) = False Then Hours = Hours + (Days - Fix(Days)) * 24 Days = Fix(Days) End If If CheckWholeNumber(Hours) = False Then Minutes = Minutes + (Hours - Fix(Hours)) * 60 Hours = Fix(Hours) End If If CheckWholeNumber(Minutes) = False Then Seconds = Seconds + (Minutes - Fix(Minutes)) * 60 Minutes = Fix(Minutes) End If If Seconds >= 60 Then Seconds = Seconds - 60 Minutes = Minutes + 1 End If If Minutes >= 60 Then Minutes = Minutes - 60 Hours = Hours + 1 End If If Hours >= 24 Then Hours = Hours - 24 Days = Days + 1 End If Application.Wait _ ( _ Now + _ TimeSerial(Hours + Days * 24, Minutes, 0) + _ Seconds * TimeSerial(0, 0, 1) _ ) End Subнадеюсь, вам понравится.
редактировать:
вот один без каких-либо дополнительных функций, для людей, которым это нравится быстрее
Public Sub WaitTime(Days As Double, Hours As Double, Minutes As Double, Seconds As Double) If Days - Fix(Days) > 0 Then Hours = Hours + (Days - Fix(Days)) * 24 Days = Fix(Days) End If If Hours - Fix(Hours) > 0 Then Minutes = Minutes + (Hours - Fix(Hours)) * 60 Hours = Fix(Hours) End If If Minutes - Fix(Minutes) > 0 Then Seconds = Seconds + (Minutes - Fix(Minutes)) * 60 Minutes = Fix(Minutes) End If If Seconds >= 60 Then Seconds = Seconds - 60 Minutes = Minutes + 1 End If If Minutes >= 60 Then Minutes = Minutes - 60 Hours = Hours + 1 End If If Hours >= 24 Then Hours = Hours - 24 Days = Days + 1 End If Application.Wait _ ( _ Now + _ TimeSerial(Hours + Days * 24, Minutes, 0) + _ Seconds * TimeSerial(0, 0, 1) _ ) End SubПримечание. В Excel 2007 Now() посылает Double с десятичными знаками в секундах, поэтому я использую Timer() для получения миллисекунд.
Примечание: Application.Wait() принимает секунды и не под (т.е. Application.Wait(Now()) ↔ Application.Wait(Now()+100*millisecond)) )
Примечание. Application.Wait() не позволяет системе выполнять другую программу, но вряд ли снижает производительность. Предпочитайте использование DoEvents .
Задержки времени в VBA | Programmerz.ru
Мне бы хотелось, чтобы мой код задерживался на 1 секунду. Ниже приведен код, который я пытаюсь сделать задержка. Я думаю, что он проверяет дату и время работы операционной системы и ждет, пока совпадёт время. У меня проблема с задержкой. Я думаю, что он не проверяет время, когда он соответствует времени ожидания, и он просто сидит там и замерзает. Он только зависает примерно в 5% случаев, когда я запускаю код. Мне было интересно о Application.Wait и если есть способ проверить, превышает ли время опроса, чем время ожидания.
newHour = Hour(Now()) newMinute = Minute(Now()) newSecond = Second(Now()) + 1 waitTime = TimeSerial(newHour, newMinute, newSecond) Application.Wait waitTime14
2017-08-05 17:43
источник
Ответы:
Я использую эту небольшую функцию для VBA.
Public Function Pause(NumberOfSeconds As Variant) On Error GoTo Error_GoTo Dim PauseTime As Variant Dim Start As Variant Dim Elapsed As Variant PauseTime = NumberOfSeconds Start = Timer Elapsed = 0 Do While Timer < Start + PauseTime Elapsed = Elapsed + 1 If Timer = 0 Then ' Crossing midnight PauseTime = PauseTime - Elapsed Start = 0 Elapsed = 0 End If DoEvents Loop Exit_GoTo: On Error GoTo 0 Exit Function Error_GoTo: Debug.Print Err.Number, Err.Description, Erl GoTo Exit_GoTo End Function2017-08-05 18:07
Если вы находитесь в Excel VBA, вы можете использовать следующее.
Application.Wait(Now + TimeValue("0:00:01"))(Строка времени должна выглядеть так: H: MM: SS.)
36
2017-09-26 01:00
Вы можете скопировать это в модуль:
Sub WaitFor(NumOfSeconds As Long) Dim SngSec as Long SngSec=Timer + NumOfSeconds Do while timer < sngsec DoEvents Loop End subи всякий раз, когда вы хотите применить паузу, напишите:
Call WaitFor(1)Надеюсь, это поможет!
11
2017-08-05 18:25
Вы пытались использовать Сон?
Вот пример ВОТ (скопировано ниже):
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Sub Form_Activate() frmSplash.Show DoEvents Sleep 1000 Unload Me frmProfiles.Show End SubОбратите внимание, что это может заморозить приложение в течение выбранного времени.
6
2017-08-05 18:20
Другой вариант ответа Стива Мэллориса, я специально нуждался в превосходстве, чтобы убежать и делать что-то в ожидании, и 1 секунда была слишком длинной.
2
2017-08-19 09:30
таймер функция также применяется к Access 2007, Access 2010, Access 2013, Access 2016, Access 2007 Developer, Access 2010 Developer, Access 2013 Developer. Вставьте этот код в паузу на определенное количество секунд
2
2017-07-02 23:41
Доступ всегда может использовать процедуру Excel, если проект имеет объект Microsoft Excel XX.X ссылка включена :
Call Excel.Application.Wait(DateAdd("s",10,Now()))2
2018-02-11 16:06
programmerz.ru
Доступ / Excel VBA – Задержка времени MS Excel онлайн
Заметка:
-
Обновить таблицы в Excel, связанные с базой данных Access
-
Таблицы в Excel необходимо обновить, например, Test_Sheet1, Test_Sheet2, Test_Sheet3
-
Доступ к файлам Excel осуществляется несколькими пользователями
Вопрос
В Access vba, если используется файл excel (только для чтения), как я могу реализовать задержку в коде доступа vba, чтобы дождаться, когда файл будет прочитан / записан, чтобы он мог продолжить работу с кодом (обновить таблицы, сохранить / закрыть файл). Обратите внимание, что файлы Excel лучше обновлять по порядку.
Я действительно выполнял дескриптор ошибки с задержкой по времени, поэтому, если номер ошибки = 1004, то задержка на X. Это действительно не работа.
Задержки времени в VBA
Function RefreshExcelTables() Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.workbooks.Open "c:\test\Test_Sheet1.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet2.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet3.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close Set ExcelApp = Nothing End FunctionВсплывающие сообщения (изображения ниже)
Обновить
Function RefreshExcelTables() On Error GoTo Error Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.workbooks.Open "c:\test\Test_Sheet1.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet2.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet3.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close Error: If Err.Number = 1004 Then call pause(5) Resume End If Set ExcelApp = Nothing End Function Public Function Pause(intSeconds As Integer) Dim dblStart As Double If intSeconds > 0 Then dblStart = Timer() Do While Timer < dblStart + intSeconds Loop End If End FunctionSolutions Collecting From Web of "Доступ / Excel VBA – Задержка времени"
Я использовал это для приостановки обработки кода:
Public Function Pause(intSeconds As Integer) Dim dblStart As Double If intSeconds > 0 Then dblStart = Timer() Do While Timer < dblStart + intSeconds ' Twiddle thumbs Loop End If End FunctionТаким образом, вы просто: Call Pause(1) где вам нужна пауза, и она будет ждать секунду.
Хорошо работает, если вам нужно только отложить полные секунды. У меня есть еще один надежный вариант с большим количеством кода, который можно использовать для гораздо меньших приращений, если вы хотите его использовать.
excel.fliplinux.com
Как дать задержку времени менее одной секунды в excel vba?
Я хочу повторить событие через определенную продолжительность менее 1 секунды. Я попытался использовать следующий код
Application.wait Now + TimeValue ("00:00:01")Но здесь минимальное время задержки составляет одну секунду. Как дать отсрочку, скажем, половину времени?
23
2017-09-03 23:20
источник
Ответы:
Вы можете использовать вызов API и Sleep:
Поместите это вверху вашего модуля:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Затем вы можете вызвать его в следующей процедуре:
Sub test() Dim i As Long For i = 1 To 10 Debug.Print Now() Sleep 500 'wait 0.5 seconds Next i End Sub20
2017-09-04 01:17
Я нашел это на другом сайте, не уверен, работает он или нет.
Application.Wait Now + 1/(24*60*60.0*2)числовое значение 1 = 1 день
1/24 - один час
1 / (24 * 60) - одна минута
поэтому 1 / (24 * 60 * 60 * 2) составляет 1/2 секунды
Вы должны использовать десятичную точку где-то, чтобы заставить число с плавающей запятой
Источник
Не уверен, что это будет стоить выстрела в миллисекундах
Application.Wait (Now + 0.000001)13
2017-09-03 23:42
вызвать waitfor (.005)
Sub WaitFor(NumOfSeconds As Single) Dim SngSec as Single SngSec=Timer + NumOfSeconds Do while timer < sngsec DoEvents Loop End subисточник Задержки времени в VBA
11
2017-11-09 10:50
Я попробовал это, и это работает для меня:
Private Sub DelayMs(ms As Long) Debug.Print TimeValue(Now) Application.Wait (Now + (ms * 0.00000001)) Debug.Print TimeValue(Now) End Sub Private Sub test() Call DelayMs (2000) 'test code with delay of 2 seconds, see debug window End Sub4
2017-10-02 19:49
Public Function CheckWholeNumber(Number As Double) As Boolean If Number - Fix(Number) = 0 Then CheckWholeNumber = True End If End Function Public Sub TimeDelay(Days As Double, Hours As Double, Minutes As Double, Seconds As Double) If CheckWholeNumber(Days) = False Then Hours = Hours + (Days - Fix(Days)) * 24 Days = Fix(Days) End If If CheckWholeNumber(Hours) = False Then Minutes = Minutes + (Hours - Fix(Hours)) * 60 Hours = Fix(Hours) End If If CheckWholeNumber(Minutes) = False Then Seconds = Seconds + (Minutes - Fix(Minutes)) * 60 Minutes = Fix(Minutes) End If If Seconds >= 60 Then Seconds = Seconds - 60 Minutes = Minutes + 1 End If If Minutes >= 60 Then Minutes = Minutes - 60 Hours = Hours + 1 End If If Hours >= 24 Then Hours = Hours - 24 Days = Days + 1 End If Application.Wait _ ( _ Now + _ TimeSerial(Hours + Days * 24, Minutes, 0) + _ Seconds * TimeSerial(0, 0, 1) _ ) End Subпример:
call TimeDelay(1.9,23.9,59.9,59.9999999)надеюсь, вам понравится.
редактировать:
вот один без каких-либо дополнительных функций, для людей, которым это нравится быстрее
Public Sub WaitTime(Days As Double, Hours As Double, Minutes As Double, Seconds As Double) If Days - Fix(Days) > 0 Then Hours = Hours + (Days - Fix(Days)) * 24 Days = Fix(Days) End If If Hours - Fix(Hours) > 0 Then Minutes = Minutes + (Hours - Fix(Hours)) * 60 Hours = Fix(Hours) End If If Minutes - Fix(Minutes) > 0 Then Seconds = Seconds + (Minutes - Fix(Minutes)) * 60 Minutes = Fix(Minutes) End If If Seconds >= 60 Then Seconds = Seconds - 60 Minutes = Minutes + 1 End If If Minutes >= 60 Then Minutes = Minutes - 60 Hours = Hours + 1 End If If Hours >= 24 Then Hours = Hours - 24 Days = Days + 1 End If Application.Wait _ ( _ Now + _ TimeSerial(Hours + Days * 24, Minutes, 0) + _ Seconds * TimeSerial(0, 0, 1) _ ) End Sub0
2017-12-06 03:45
В противном случае вы можете создать свою собственную функцию, затем вызвать ее, важно использовать Double
Function sov(sekunder As Double) As Double starting_time = Timer Do DoEvents Loop Until (Timer - starting_time) >= sekunder End Function0
2017-08-17 08:16
Очевидно, старый пост, но это, похоже, работает на меня ....
Application.Wait (Now + TimeValue("0:00:01") / 1000)Разделите все, что вам нужно. Десятая, сотая и т. Д. Все работают. Удаляя часть «делить на», макросу требуется больше времени для запуска, поэтому, без ошибок, я должен полагать, что он работает.
0
2017-12-13 18:29
Никакой ответ не помог мне, поэтому я его построил.
' function Timestamp return current time in milliseconds. ' compatible with JSON or JavaScript Date objects. Public Function Timestamp () As Currency timestamp = (Round(Now(), 0) * 24 * 60 * 60 + Timer()) * 1000 End Function ' function Sleep let system execute other programs while the milliseconds are not elapsed. Public Function Sleep(milliseconds As Currency) If milliseconds < 0 Then Exit Function Dim start As Currency start = Timestamp () While (Timestamp () < milliseconds + start) DoEvents Wend End FunctionЗаметка : В Excel 2007, Now() отправьте Double с десятичными знаками на секунды, поэтому я использую Timer() чтобы получить миллисекунды.
Заметка : Application.Wait() принимать секунды и не под (т.е. Application.Wait(Now()) Application.Wait(Now()+100*millisecond)))
Заметка : Application.Wait() не позволяет системе выполнять другую программу, но вряд ли снижает производительность. Предпочитают использование DoEvents,
0
2018-01-05 15:57
programmerz.ru
Access/Excel VBA - Время задержки
Примечание:
Обновить таблицы в Excel, которые связаны с базой данных Access
Таблицы в Excel должны быть обновлены, чтобы, например, Test_Sheet1, Test_Sheet2, Test_Sheet3
файлы Excel доступны несколькими пользователями
Вопрос
В Access vba Если используется файл excel (только для чтения), как я могу реализовать задержку в коде доступа vba, чтобы дождаться, когда файл будет прочитан/записан, чтобы он продолжал работу с код (обновить таблицы, сохранить/закрыть файл). Обратите внимание, что файлы Excel лучше обновлять по порядку.
Я выполнил дескриптор ошибки с задержкой по времени, поэтому, если номер ошибки = 1004, то задержка на X. Это действительно не работа.
Timing Delays in VBA
Function RefreshExcelTables() Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.workbooks.Open "c:\test\Test_Sheet1.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet2.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet3.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close Set ExcelApp = Nothing End FunctionВсплывающие сообщения (изображения ниже)
Update
Function RefreshExcelTables() On Error GoTo Error Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.workbooks.Open "c:\test\Test_Sheet1.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet2.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet3.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close Error: If Err.Number = 1004 Then call pause(5) Resume End If Set ExcelApp = Nothing End Function Public Function Pause(intSeconds As Integer) Dim dblStart As Double If intSeconds > 0 Then dblStart = Timer() Do While Timer < dblStart + intSeconds Loop End If End Functionexcel vba excel-vba ms-access access-vba
stackoverrun.com