설정된 시간(초)마다 코드를 실행하는 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
고통스러울 수 있습니다. 특히 다음과 같은 경우:
- 코드화하려고 하면 이벤트가 트리거될 때마다 창에 대한 포커스가 중단됩니다.
- 여러 워크북이 열려 있고 타이머를 사용해야 하는 워크북을 닫으면 워크북이 계속 트리거되고 다시 열립니다(이벤트를 제대로 종료하지 않은 경우).
칩 피어슨의 이 기사는 매우 인상적이었습니다.지금은 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
'source' 카테고리의 다른 글
_id 필드가 없는 mongoexport (0) | 2023.07.01 |
---|---|
IIS가 있는 ASP.NET Core - HTTP 동사 허용되지 않음 (0) | 2023.07.01 |
data.frame 목록에서 개별 엑셀 워크시트 - R (0) | 2023.07.01 |
Oracle "ORA-01008: 일부 변수가 바인딩되지 않음" 오류(매개 변수 포함) (0) | 2023.07.01 |
오류: 쓰기를 시도하는 동안 워크북을 압축하지 못했습니다.xlsx (0) | 2023.07.01 |