source

설정된 시간(초)마다 코드를 실행하는 VBA Macro On Timer 스타일(예: 120초)

ittop 2023. 7. 1. 10:01
반응형

설정된 시간(초)마다 코드를 실행하는 VBA Macro On Timer 스타일(예: 120초)

120초마다 코드를 실행해야 합니다.저는 이것을 VBA에서 쉽게 할 수 있는 방법을 찾고 있습니다.나는 타이머 값을 얻을 수 있다는 것을 알고 있습니다.Auto_Open마법의 번호를 사용해야 하는 것을 방지하기 위한 이벤트이지만 120초마다 실행할 무언가를 얻기 위해 타이머를 끄는 방법을 잘 알 수 없습니다.

저는 수면과 함께 무한 루프를 피할 수 있다면 사용하고 싶지 않습니다.


편집:

제공된 답변을 기반으로 한 크로스 포스트는 Excel VBA Application에 있습니다.제시간에. 이걸 사용하는 건 좋지 않은 것 같아요 어느 쪽이든 생각은?

워크북이 처음 열리면 다음 코드를 실행합니다.

alertTime = Now + TimeValue("00:02:00")
Application.OnTime alertTime, "EventMacro"

그런 다음 워크북에 "이벤트 매크로"라는 매크로를 추가하여 이를 반복합니다.

Public Sub EventMacro()
    '... Execute your actions here'
    alertTime = Now + TimeValue("00:02:00")
    Application.OnTime alertTime, "EventMacro"
End Sub

예, 사용할 수 있습니다.Application.OnTime이것을 위해 그리고 그것을 루프에 넣습니다.이것은 마치 알람시계와 같습니다. 여러분이 다시 울리기를 원할 때를 위해 계속해서 스누즈 버튼을 누르는 것입니다.다음은 시간에 따라 3초마다 셀 A1을 업데이트합니다.

Dim TimerActive As Boolean
Sub StartTimer()
    Start_Timer
End Sub

Private Sub Start_Timer()
    TimerActive = True
    Application.OnTime Now() + TimeValue("00:00:03"), "Timer"
End Sub

Private Sub Stop_Timer()
    TimerActive = False
End Sub

Private Sub Timer()
    If TimerActive Then
        ActiveSheet.Cells(1, 1).Value = Time
        Application.OnTime Now() + TimeValue("00:00:03"), "Timer"
    End If
End Sub

다음을 입력할 수 있습니다.StartTimer의 절차Auto_Open이벤트 및 변경에서 수행되는 작업Timer절차(지금은 A1의 시간을 업데이트하는 중입니다.ActiveSheet.Cells(1, 1).Value = Time).

참고: 코드가 필요합니다(게다가).StartTimer워크시트 모듈이 아닌 모듈에 포함됩니다.워크시트 모듈에 있는 경우 코드를 약간 수정해야 합니다.

워크북 이벤트:

Private Sub Workbook_Open()
    RunEveryTwoMinutes
End Sub

모듈:

Sub RunEveryTwoMinutes()
    //Add code here for whatever you want to happen
    Application.OnTime Now + TimeValue("00:02:00"), "RunEveryTwoMinutes"
End Sub

워크북이 열린 후 첫 번째 코드 조각만 실행하려면 2분의 지연 시간을 추가합니다.Workbook_Open이벤트

(이것은 MS Access 도움말 파일에서 딴 것입니다.XL도 비슷한 점이 있을 겁니다.)기본적으로 TimerInterval은 폼 수준 속성입니다.설정한 후에는 Form_Timer 하위 항목을 사용하여 원하는 작업을 수행합니다.

Sub Form_Load()
    Me.TimerInterval = 1000 '1000 = 1 second
End Sub

Sub Form_Timer()
    'Do Stuff
End Sub

를 사용하여 확인할 수 있습니다.OnTime고통스러울 수 있습니다. 특히 다음과 같은 경우:

  1. 코드화하려고 하면 이벤트가 트리거될 때마다 창에 대한 포커스가 중단됩니다.
  2. 여러 워크북이 열려 있고 타이머를 사용해야 하는 워크북을 닫으면 워크북이 계속 트리거되고 다시 열립니다(이벤트를 제대로 종료하지 않은 경우).

칩 피어슨의 이 기사는 매우 인상적이었습니다.지금은 Windows 타이머를 사용하는 것이 좋습니다.OnTime.

내 솔루션:

Option Explicit
Public datHora As Date

Function Cronometro(action As Integer) As Integer 
'This return the seconds between two >calls
Cronometro = 0
  If action = 1 Then 'Start
    datHora = Now
  End If
  If action = 2 Then 'Time until that moment
    Cronometro = DateDiff("s", datHora, Now)
  End If
End Function

어떻게 사용합니까?진정...

dummy= Cronometro(1) ' This starts the timer

seconds= Cronometro(2) ' This returns the seconds between the first call and this one

언급URL : https://stackoverflow.com/questions/2319683/vba-macro-on-timer-style-to-run-code-every-set-number-of-seconds-i-e-120-secon

반응형