Remkomplekty.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Excel vba ontime

Аналог Excel-метода «OnTime»

Что можно использовать вместо Excel-метода «OnTime», чтобы запускать нужную процедуру в нужное время?
Мне не нравится метод «OnTime», т.к. нужно много факторов учитывать, чтобы использовать метод «OnTime».

Маленькое продолжение темы «Аналог Excel-метода «OnTime»» или про многопоточность
Коллеги, хочу добавить несколько слов . (раз уж речь зашла про 2003 офис) Комментарий: на счет.

Как во всей книге Excel из 10-ти листов удалить » » двойные и более пробелы на » «
Очень хочется удалить во всей книге из 25 тысяч строк более одного пробелов одним махом, решится.

В форме создать кнопку, которая будет изменять текст в определенной строке Excel с «неоплачено» на «оплачено»
Добрый вечер, необходимо в форме создать кнопку которая будет изменять текст в ячейке экселя с.

Как использовать переменную в Excel/VBA в «объект».Formula=»переменная»
Как использовать переменную в Excel/VBA в строке Dim переменная As int Range(‘A2’).Formula =.

Уменьшение размера активного окна, передвижение вдоль границ экрана
Если будет инетресно — пишите. Расскажу какие есть ограничения и особенности.

Добавлено через 56 минут
Обычно еще добавляю что-то вроде этого:

Я тоже как-то столкнулся с необходимостью использовать чтото вроде таймера
и вот что я придумал

Вообщето, тот код был для формы..
хотя будет работать в любом другом модуле.

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

Странно, у меня нормально можно работать ..
вообще, это все микрософты виноваты..
перемудрили с новыми версиями уже настолько! что простой код не может работать )
я себе ставил 2007-офис, и пожалел об этом.. потом еще неделю пытался его удалить
удалил кое-как, и следы уничтожил везде в реестре, чтоб уж наверняка..
избавиться от этой софтины, потомучто нервы не железные..
возиться с ним

Добавлено через 1 минуту
сейчас у меня опять 2003-й, самый глюко-устойчивый на мой взгляд

Антихакер32, я изменил Ваш макрос, я сделал Sleep в 100 секунд и не смог зайти на Excel-лист.
Сейчас сделан 1 секунду (как у Вас) и смог зайти на Excel-лист, но всё равно есть очень сильные задержки.

В Excel 2003 тоже есть ощутимые задержки.

У меня «Windows 7».

The trick, вместо того, чтоб самоуверенно утверждать
что код кривой, лучше покажите свой пример, не важно,
насколько предвзято вы относитесь лично ко мне, покажите это Скрипт
и не имейте такой привычки, высказывать то, что невозможно проверить
вы уже не первый раз такое делали в разделе VB6, отчасти мне из за вашего преследования
неахото постить здесь

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

я тоже могу одно слово написать и балдеть..
я тоже так умею . WaitForSingleObject ..

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

Excel vba ontime

A macro can reside in different codemodules: the workbook, a worksheet, a macromodule, a userform or a class
I will not discuss macros in a userform or in a class.

The name of the macro will be written as a string (see the examples), just like in the method Application.Run.
If a macro resides in a macromodule and it’s not a Private Sub you don’t need to specify the codemodule’s name, unless another macromodule contains a macro with an identical name.
Nevertheless it’s always sensible to add the ‘codename’ to the macro name to prevent any confusion.

The macro resides in macromodule ‘Module2’

The macro resides in the codemodule of ‘ThisWorkbook’

The macro resides in the codemodule of Sheet3

In the application all macros in open workbooks (visible workbooks, hidden workbooks (like e.g. personal.xlsb ) or loaded Add-Ins) are available.
So you’d better use the filename to call the macro as well. The macro ‘M_evenaar’ in the codemodule of ‘sheet2’ in workbook ‘Example.xlsb’

The macro ‘M_equator’ in the codemodule of ‘sheet1’ in workbook ‘Personal.xlsb’

The macro ‘M_equator’ in the codemodule ‘Module1’ in AddIn ‘snb_addin.xlam’

A macro in a closed workboek can also be triggered by the method Ontime.
The workbook will be opened first and subsequently the macro will be executed.
E.g. the macro «M_equator» in macromodule Module1 in the closed workbook «G:OF__ontime_closed_snb.xlsb»

The macro will be triggered at a moment that different workbooks could be openend / active/ have the focus than was the case when the ontime method was started.
If the code that will be executed is independent of the active workbook it poses no real problem, e.g.

Sometimes the macro can’t be executed because the user is editing a cell, another macro is running etc.
Unlike the title of this argument suggests, this argument is meant to indicate how long the application will try to start the macro if it fails to do so the first time.
If this argument is empty the macro will be executed as soon as possible.

This argument activates (True) or cancels (False) the specifically indicated (by time and macro name) method ontime.
Since the default is ‘True’, only the option ‘False’ is worth discussing. Activate ‘ontime’:

Sub M_snb_ontime_start()
Application.OnTime TimeSerial( 12, 45, 0 ), «M_snb»
End Sub

Sub M_snb()
MsgBox «illustration»
End Sub

NB. Only if the ‘earliest time’ is still in the future the canceling has relevance.
The macro that cancels the ontime action requires the exact same time and macro name as used in the activating macro.

Do not use Alt-F8 to run the ‘cancel’ macro; it often results in Error 400.
Link the macro to a worksheet event, a workbook event, an ActiveX-control, a picture, etc. instead to avoid this error message.

The calling macro can be placed anywhere:
— in the codemodule of a workbook
— in the codemodule of a worksheet
— in the codemodule of a userform
— in the codemodule of a class

The calling macro can be a separate one (as in the examples above)

The calling macro can be part of the eventcode of a:

A macro that contains an ontime instruction can call itself. The macro will be executed every day at 12.45 o’clock

In this case it’s simple because it’s a fixed time value.

It’s less simple in the case of a variable time value, e.g. dateadd(«s»,10,time).
In such a case you will have to register the time value to be able to execute the ‘cancel’ macro.

You can register the time value in 2 ways:
— use a variable to store the time value
that variable has to be available/accessible in both macros (the start macro and the cancel macro)
— use a property of the application (Excel), of a workbook or a worksheet or one of the objects in the application, a workbook or a worksheet

Читать еще:  Создать новую книгу excel vba

To give access to a variable in different macros it needs to be declared as Private or Public.
To reduce any interference with other code I’d prefer to declare such a variable as Private.
That means that all macros in the same codemodule (the workbook’s, a worksheet’s, a userform’s), can use this variable.

The code is in the codemodule of worksheet sheet1.
Every 5 seconds the code will be executed.

Sub M_snb_ontime_start()
MsgBox «illustration»

t = DateAdd( «s», 5, Time )
Application.OnTime t , » sheet1 .M_snb_ontime_start»
End Sub

Sub M_snb_ontime_cancel()
Application.OnTime t , » sheet1 .M_snb_ontime_start», , False
End Sub

The code is in the codemodule of ‘ThisWorkbook’.
Every 5 seconds the code will be executed.

Sub M_snb_ontime_start()
MsgBox «illustration»

t = DateAdd( «s», 5, Time )
Application.OnTime t , » Thisworkbook .M_snb_ontime_start»
End Sub

Sub M_snb_ontime_cancel()
Application.OnTime t , » ThisWorkbook .M_snb_ontime_start», , False
End Sub

The code is in a ‘normal’ macromodule.
Every 5 seconds the code will be executed.

Sub M_snb_ontime_start()
MsgBox «illustration»

t = DateAdd( «s», 5, Time )
Application.OnTime t , «M_snb_ontime_starten»
End Sub

Sub M_snb_ontime_sluiten()
Application.OnTime t , «M_snb_ontime_start», , False
End Sub

If you intend to cancel the ontime action at the moment the workbook will be closed (but not the application) it’s obvious to use the ‘BeforeClose’ event.
It’s practical to put the variable that stores the time value into the same codemodule where the ‘BeforeClose’ event resides: the workbook.

the code will look like this in the codemodule of ‘ThisWorkbook’:

Sub M_snb_ontime_start()
MsgBox «illustration»

t = DateAdd( «s», 5, Time )
Application.OnTime t , » Thisworkbook .M_snb_ontime_start»
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnTime t , » ThisWorkbook .M_snb_ontime_start», , False
End Sub

Add a ‘name’ to store the execution time value.
An existing name will be overwritten if a new ‘name’ with the same name will be added.
The value in the ‘name’ has to be evaluated in Excel; e.g. the value 12:00:00 wil be stored as «=0.5».
Excel evaluates between brackets [. ] or with Evaluate(«..».).

Sub M_snb_ontime_start()
Sheet1.TextBox1.Text = Time

Application.Names.Add «n_time» , DateAdd( «s», 1, Time )
Application.OnTime [ n_time ], » Thisworkbook .M_snb_ontime_start»
End Sub

Sub M_snb_ontime_cancel()
Application.OnTime [ n_time ], » Thisworkbook .M_snb_ontime_start», , False
End Sub

The StatusBar is available to store a starttime regardless its visibility.
The Statusbar can contain strings only; a stored time value has to be converted to a time before applying it in the ontime method.

Sub M_snb_ontime_start()
Sheet1.TextBox1.Text = Time

Application.StatusBar = DateAdd( «s», 1, Time )
Application.OnTime CDate(Application.StatusBar), » Thisworkbook .M_snb_ontime_start»
End Sub

Sub M_snb_ontime_cancel()
Application.OnTime CDate(Application.StatusBar), » Thisworkbook .M_snb_ontime_start», , False
End Sub

Sub M_snb_ontime_start()
Sheet1.TextBox1.Text = Time

If IsDate(Application.GetCustomListContents(Application.CustomListCount)(1)) Then Application.DeleteCustomList Application.CustomListCount
Application.AddCustomList Array(DateAdd( «s», 1, Time ))
Application.OnTime Application.GetCustomListContents(Application.CustomListCount)(1), » Thisworkbook .M_snb_ontime_start»
End Sub

Sub M_snb_ontime_cancel()
Application.OnTime Application.GetCustomListContents(Application.CustomListCount)(1), » Thisworkbook .M_snb_ontime_start», , false
End Sub

An existing name will be overwritten if a new ‘name’ with the same name will be added.
The value in the ‘name’ has to be evaluated in Excel; e.g. the value 12:00:00 wil be stored as «=0.5».
Excel evaluates between brackets [. ] or with Evaluate(» . «),

Sub M_snb_ontime_start()
Sheet1.TextBox1.Text = Time

Thisworkbook.Names.Add «wn_time» , DateAdd( «s», 1, Time )
Application.OnTime [ wn_time ], » Thisworkbook .M_snb_ontime_start»
End Sub

Sub M_snb_ontime_cancel()
Application.OnTime [ wn_time ], » Thisworkbook .M_snb_ontime_start», , False
End Sub

A documentproperty can contain a time value.
Therefore converting its value to a time value isn’t necessary.
Adding a custom documentproperty will not replace the existing one.
So it’s necessary to check whether the custom documentproperty exists or not.

Sub M_snb_ontime_start()
On Error Resume Next
Sheet1.TextBox1.Text = Time

ThisWorkbook.CustomDocumentProperties( «c_time» ) = DateAdd( «s», 1, Time )
If Err.Number <> 0 Then ThisWorkbook.CustomDocumentProperties.Add «c_time» , 0, 3, DateAdd( «s», 1, Time )
Application.OnTime ThisWorkbook.CustomDocumentProperties( «c_time» ), » Thisworkbook .M_snb_ontime_start»
End Sub

Sub M_snb_ontime_cancel()
Application.OnTime ThisWorkbook.CustomDocumentProperties( «c_time» ), » Thisworkbook .M_snb_ontime_start», , False
End Sub

Any time value can be stored in a cell in a workbook.
Any user might change / remove that value; so it’s not a very safe location.

Excel can run several ontime instructions simultaneously.
These might be actions that run only once, but also repeatedly.

Sub M_snb_ontime_start()
Application.OnTime DateAdd( «s», 1, Time ), » sheet1 .M_equator_1″

Application.OnTime DateAdd( «s», 4, Time ), » sheet1 .M_equator_2″

Application.OnTime DateAdd( «s», 10, Time ), » sheet1 .M_equator_3″
End Sub

Sub M_equator_1()
MsgBox «equator_1»
End Sub

Sub M_equator_2()
MsgBox «equator_2»
End Sub

Sub M_equator_3()
MsgBox «equator_3»
End Sub

Excel vba ontime

There may come a time when you need to run a procedure automatically at a particular time every day.
You may want to refresh the data in your database every 5 minutes.
This can be used to run a macro at a later time or to execute a procedure at regular time intervals.
Starts a background timer that runs a macro at a specified time.
Each application can only maintain one background timer set by OnTime.
If you start another timer before an existing timer runs, the existing timer is canceled.
This method will only be executed if the file containing the procedure is loaded when this line of code is executed and if the file containing the procedure is currently loaded at the time it is meant to run.
Always use fully qualified macro names: Project.Module.SubName
In Excel there is also an Application.Wait

Excel

EarliestTime — The time when you want this procedure to be run.
Procedure — The time when you want this procedure to be run.
Latesttime — The latest time at which the procedure can be run. If you do not specify a ‘LatestTime’ then the macro will run when Excel is available after the ‘EarliestTime’ has passed. For example, if LatestTime is set to EarliestTime + 30 and Microsoft Excel is not in Ready, Copy, Cut, or Find mode at EarliestTime because another procedure is running, Microsoft Excel will wait 30 seconds for the first procedure to complete. If Microsoft Excel is not in Ready mode within 30 seconds, the procedure won’t be run. If this argument is omitted, Microsoft Excel will wait until the procedure can be run.
Schedule — True to schedule a new OnTime procedure. False to clear a previously set procedure. The default value is True.

This will run as soon as the current procedure has finished.

This will run 10 seconds from the time this line of code it executed.

Cancelling a scheduled Procedure
It is possible to cancel a procedure that has been scheduled to run but you need to know the exact date and time it was scheduled for.
To cancel a scheduled procedure you must know the «EarliestTime» it was scheduled for.
Exactly the same syntax except you set the schedule paramater to False. This tells the application to cancel the schedule.

Читать еще:  Vba excel array синтаксис

When — The time at which the macro is to be run. Can be a string that specifies a time (for example, «4:30 pm» or «16:30»), or it can be a serial number returned by a function such as TimeValue or TimeSerial (for example, TimeValue(«2:30 pm») or TimeSerial(14, 30, 00)). You can also include the date (for example, «6/30 4:15 pm» or TimeValue(«6/30 4:15 pm»)).
Name — The name of the macro to be run. Use the complete macro path to ensure that the correct macro is run (for example, «Project.Module1.Macro1»). For the macro to run, the document or template must be available both when the OnTime instruction is run and when the time specified by When arrives.
Tolerance — The maximum time (in seconds) that can elapse before a macro that wasn’t run at the time specified by When is canceled. Macros may not always run at the specified time. The macro will be delayed until Word has completed another task. If this argument is 0 (zero) or omitted, the macro is run regardless of how much time has elapsed since the time specified by When.

This will run as soon as the current procedure has finished.

This will run 10 seconds from the time this line of code is executed.

This example runs the macro named «Macro1» 15 seconds from the time the example is run.
The macro name includes the project and module name.

This example runs the macro named «Start» at 1:30 P.M.
The macro name includes the project and module name.

Cancelling a scheduled Procedure
A second call to the OnTime will cancel the first call

PowerPoint

The method Application.OnTime does not exist in PowerPoint.

Outlook

The method Application.OnTime does not exist in Outlook.

Returning the correct time
This can be done using the following function

Scheduled the Procedure

Important

The line of code to cancel a scheduled procedure will generate an error when you attempt to cancel a non existent procedure.
The «EarliestTime» parameter is the earliest time the procedure will be called and is not the definitive time. Another macro might currently be running.

Excel VBA

Application.OnTime VBA, Schedule Excel to Run Macros at Periodic Intervals or a Specified Time

User Rating: 5 / 5

Scheduling Excel to Run a Procedure at periodic intervals or at a specific time of day, with the OnTime Method. Automatically run macros.

Excel Application.OnTime Method — Scheduling OnTime Events

Use the Application.OnTime Method to run a procedure at specified intervals or at a specific time of day. Syntax: ApplicationObject .OnTime(EarliestTime, ProcedureName, LatestTime, Schedule). Using this method you can schedule to run a procedure in the future. You can either fix specific intervals, starting from now, when the procedure will run, or you can fix a specific time of day. The (Excel) Application Object represents the entire Excel application, and is the top-most object in the Excel object model. The EarliestTime and ProcedureName arguments are required to be specified while the other arguments are optional. The EarliestTime argument specifies the time when the procedure is to be run. The ProcedureName argument specifies the name of the procedure you want to be executed. With the LatestTime argument you can set the time limit for running the procedure viz. if you set the LatestTime to «EarliestTime + 20» and if meanwhile another procedure is being executed and Excel is not in ready mode within 20 seconds, this procedure will not run. Omitting the LatestTime argument will make Excel wait and run the procedure. Omitting the Schedule argument will default to True, which sets a new Ontime procedure. To cancel an existing OnTime procedure set earlier, specify False.

To fix specific intervals starting from now, to run the procedure, use «Now + TimeValue(time)». To fix a specific time of day for the procedure to run, use «TimeValue(time)». See below examples on using these.

Stop or Cancel a Running Procedure (using the OnTime method)

If you attempt to close the workbook while a procedure is being run using Application.Ontime, Excel will re-open the workbook, and leave it open post completion of the procedure. Hence, you will need to cancel the procedure at a certain point or time.

To cancel a running procedure (using the OnTime method), the precise time of its scheduled run is required. Note that if you don’t pass the time to a variable, Excel will not know which OnTime method to cancel, as Now + TimeValue(«00:00:03») is not static, but becomes static when passed to a variable. This means that the time when the procedure is to run (EarliestTime argument) should be assigned to a variable (use a Public variable to make the variable available to all Procedures in all modules) and then use it to cancel the OnTime.

Example 1: This procedure uses the OnTime Method to auto increment cell value at specific time intervals, and Stops the procedure on crossing a specific cell value.

The procedure should be entered in a Standard Module (select Insert>Module, in VBE code window).

‘Dim as a Public variable and it will be available to all Procedures in all modules.
Public rTime As Date

Sub CellValueAutoIncr1()
‘This procedure uses the OnTime Method to auto increment cell value at specific time intervals, and Stops the procedure on crossing a specific cell value.
‘The procedure should be entered in a Standard Module (select Insert>Module, in VBE code window).

‘To run a procedure at a specific time, use TimeValue(time) viz. TimeValue(«20:30:00») will run a procedure at 8.30 pm. To run a procedure at specified time intervals (say, from now), use Now + TimeValue(time) viz. Now + TimeValue(«00:00:05») sets the time interval at 5 seconds, at which interval the procedure will run.
‘set the time interval at 3 seconds, at which interval the procedure will run.
rTime = Now + TimeValue(«00:00:03»)
‘procedure named CellValueAutoIncr1 will autmatically run, at the sheduled time interval, with the OnTime Method.
Application.OnTime EarliestTime:=rTime, Procedure:= «CellValueAutoIncr1» , schedule:=True
‘increment the value in cell A1 (in Active Worksheet) by 5, for each time the Macro is repeated:
Cells(1, 1).Value = Cells(1, 1).Value + 5

‘If you attempt to close the workbook while a procedure is being run using Application.Ontime, Excel will re-open the workbook, and leave it open post completion of the procedure. Hence, you will need to cancel the

procedure at a certain point or time.

‘stop the procedure at a specified point — the procedure will stop after cell A1 value crosses 25 for the first time.

If Cells(1, 1).Value > 25 Then

‘If you need to cancel an OnTime, you must provide the exact time that the event was schedule to take place.

‘Therefore, you need to store the time at which the procedure is to run in a Public variable and use that variable’s value in calls to OnTime.

Читать еще:  Excel перебор ячеек в цикле

‘To cancel a running procedure (using the OnTime method), the precise time of its scheduled run is required. Note that if you don’t pass the time to a variable, Excel will not know which OnTime method to cancel, as

Now + TimeValue(«00:00:03») is not static, but becomes static when passed to a variable. This means that the time when the procedure is to run (EarliestTime argument) should be assigned to a variable (Public

variable rTime in this example) and then use it to cancel the OnTime.

‘cancel the procedure by setting the Schedule argument to False:

Application.OnTime rTime, «CellValueAutoIncr1», , False

End Sub

Example 2: This procedure uses the OnTime Method to auto increment cell value at specific time intervals, and Stops the procedure after it runs for a specific number of times.

The procedure should be entered in a Standard Module (select Insert>Module, in VBE code window).

Public eTime As Date
Dim count As Integer

Sub CellValueAutoIncr2()
‘This procedure uses the OnTime Method to auto increment cell value at specific time intervals, and Stops the procedure after it runs for a specific number of times.

eTime = Now + TimeValue(«00:00:03»)
Application.OnTime eTime, «CellValueAutoIncr2», , True
Cells(1, 1).Value = Cells(1, 1).Value + 5
count = count + 1

‘stop the procedure after it runs for 5 times:

If count = 5 Then

Application.OnTime eTime, «CellValueAutoIncr2», , False

End Sub

Example 3: Start the OnTime procedure automatically when the workbook is opened; stop the OnTime procedure automatically on closing the workbook. This Application.OnTime procedure sets reminders at specific times and auto-closes workbook at a specified time.

Add code (workbook procedures) to the Workbook module (ThisWorkbook):

Private Sub workbook_open()
‘to start the procedure automatically when the workbook is opened — add this code to the Workbook module (ThisWorkbook)

‘call SetReminder procedure:

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
‘to stop the procedure automatically on closing the workbook, add this code to the Workbook module (ThisWorkbook)

On Error Resume Next
‘call StopSetReminder procedure to stop the Application.OnTime:
StopSetReminder
‘save workbook before closing:

End Sub

The procedures to be entered in a Standard Module:

Public dTime As Date

Sub SetReminder()
‘This Application.OnTime procedure sets reminders at specific times and auto-closes workbook at a specified time:

On Error Resume Next
dTime = Now + TimeValue(«00:00:01»)
‘procedure named SetReminder will autmatically run, at the sheduled time interval, with the OnTime Method.
Application.OnTime dTime, «SetReminder»

‘Close the workbook at the specified time:

If Time = TimeSerial(18, 30, 0) Then

End If
‘set OfficeClose reminder:

If Time = TimeSerial(17, 30, 0) Then

Application.OnTime dTime, «OfficeClose»

End If
‘set LunchBreak reminder:

If Time = TimeSerial(13, 0, 0) Then

Application.OnTime dTime, «LunchBreak»

End If
‘set CoffeeBreak reminder:

If Time = TimeSerial(11, 15, 0) Then

Application.OnTime dTime, «CoffeeBreak»

End Sub

Sub CoffeeBreak()

Dim obj As Object
Dim strMsg As String
Set obj = CreateObject(«WScript.Shell»)
‘play the Beep sound, you can customize the sound / message you wish to play:
Beep
‘the Popup Message Box will automatically close by itself, without user action of clicking Ok:

strMsg = obj.Popup(«Coffee Break Sir!», vbOKCancel)

End Sub

Sub LunchBreak()

Dim obj As Object
Dim strMsg As String
Set obj = CreateObject(«WScript.Shell»)
Beep

strMsg = obj.Popup(«Lunch Break Sir!», vbOKCancel)

End Sub

Sub OfficeClose()

Dim obj As Object
Dim strMsg As String
Set obj = CreateObject(«WScript.Shell»)
Beep

strMsg = obj.Popup(«Office Closing Sir!», vbOKCancel)

End Sub

Sub StopSetReminder()
‘Stop the Application.OnTime procedure named SetReminder

Application.OnTime dTime, «SetReminder», , False

End Sub

Sub CloseWorkBook()
‘close the workbook

Excel VBA несколько Application.OnTime

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

Это то, что я хочу сделать:

Запускайте sub (testOnTime) каждые 1 минуту, используя вызов «recursive»

Внутри подгруппы (testOnTime):

запустите «firstSection» через 10 секунд после входа в sub (testOnTime)

Внутри «firstSection»: запись отладочных сообщений в Excel лист «MySheet»

запустите «lastSection» через 40 секунд после входа в sub (testOnTime)

Внутри «lastSection»: запись отладочных сообщений в Excel лист «MySheet»

Запись отладочных сообщений на Excel лист «Mysheet»

суб «testOnTime» работать в 5 раз?: Нет — > продолжить, да — > выйти

Почему «Outside. » записывается сначала на лист excel, когда он должен быть последней инструкцией внутри макроса?

Почему макрос выводит «two» msgs одного и того же, когда он должен выводиться только один раз?

Есть ли лучший способ достичь моей желаемой цели без использования «OnTime»?

2 Ответа

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

Я смог создать удвоение сообщений, запустив макрос дважды-excel с удовольствием позволяет ему работать дважды,и вы получаете удвоение сообщений. Это то, что вызвало проблему?

Я думаю, вы не понимаете, как работает Application.OnTime-это неблокирующий вызов, поэтому он создает будущий вызов указанной подпрограммы, а затем продолжает — Вот почему сообщение «outside» отображается первым. Я думаю, что именно поэтому сообщение «Done» отображается немедленно, пока оно не будет переписано.

Надеюсь, это поможет

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

Итак, я создаю экземпляр флага для каждого раздела, флаг установлен на FALSE, внутри макроса флаг будет установлен на TRUE. После Application.OnTime, я проверяю флаг TRUE, если не жду (используя DoEvents). Это гарантирует, что после выполнения неблокирующего OnTime программа «waits» до тех пор, пока этот конкретный макрос не будет выполнен, прежде чем продолжить. Это должно послужить моей цели.

Похожие вопросы:

Я разрабатываю рабочую книгу, похожую на панель мониторинга, в Excel, и я создал процедуру для отображения некоторых диаграмм время от времени автоматически, используя метод Application.OnTime из.

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

Используя VBA в Excel 2003, я пытаюсь отменить событие Application.OnTime, используя следующий код: Application.OnTime EarliestTime:=varNextRunTime, Procedure:=SomeMethod, Schedule:=False где.

У меня есть живая лента данных в excel, теперь вы хотите записать данные, как показано здесь: ] Я написал на код следующим образом Option Explicit Dim SchedRecalc As Date Sub Recalc().

Я написал таймер в vba в excel, используя application.ontime, который издает звук и выдает окно сообщения при достижении конечного времени. Это прекрасно работает, когда время позже в тот же день.

Я пытаюсь запланировать запуск двух отдельных подсистем в Excel VBA с помощью приложения OnTime. Мне удалось заставить его работать, используя приведенный ниже код-AA выполняется каждые 2 секунды, а.

У меня есть какой-то старый код Excel VBA, где я хочу запускать задачу через регулярные промежутки времени. Если бы я использовал VB6, я бы использовал управление таймером. Я нашел метод.

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×