Macro hoạt động lặp lại theo thời định sẵn !

Để một macro tự hoạt động lặp đi lặp lại theo thời gian thực chúng ta sử dụng những cách sau:
Cách 1 :

Public RunWhen As Double
Public Const cRunIntervalSeconds = 59 ' Thay doi thoi gian o day
Public Const cRunWhat = "TheSub"  ' nhung Sub can lap o day

Sub StartTimer()
    RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
        Schedule:=True
End Sub

Sub TheSub()
    DoEvents 'Để sự kiện song hành khác hoạt động, ví dụ: App.Calculation
    ''''''''''''''''''''''''
    ' code cua ban vao day
    ''''''''''''''''''''''''

StartTimer
End Sub

Sub StopTimer()
' Ngung StartTimer
    On Error Resume Next
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
        Schedule:=False
End Sub

Cách 2 :
Dán vào Module*:

Option Explicit
Public kt As Boolean
Sub StopReTime()
kt = False
End Sub
Public Sub ReTime()
If kt = True Then
''''''''''''''''''
'Sub muon chay o day
'''''''''''''''''
Application.OnTime Time() + TimeValue("00:00:45"), "ReTime"
End If
End Sub

+ Dán vào Object / Sheet*(code) và tạo một CommandButton1 :

Option Explicit
Private Sub CommandButton1_Click()
kt = True
Application.OnTime Time() + TimeValue("00:00:45"), "ReTime"   ' 45 giay
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
kt = False
End Sub

Cách 3:
có thể tạo Form (FormSub) để điều chỉnh giây và số lần lặp , đầu tiên tạo 2 textbox "TG" (thời gian lặp) và "SL" (số lần lặp) :

Option Explicit
Public kt As Boolean, SLL As Integer
Sub RunFormSub()
'tao mot nut de Open Form
FormSub.Show
End Sub
Sub StopFormSub()
'Tao mot nut de Stop
kt = False
End Sub
Public Sub ReTime()
If (kt) And (SLL < Val(FormSub.SL.Text)) Then
'
'code
'
Application.OnTime Time() + TimeValue("00:00:" & Right(FormSub.TG.Text, 2)), "ReTime"
SLL = SLL + 1
End If
End Sub

+ FromSub(code)

Option Explicit
Private Sub CommandButton1_Click()
'Trong Form tao mot nut de Run (Chay)
kt = True
Application.OnTime Time() + TimeValue("00:00:" & Right("00" & TG.Text, 2)), "ReTime"
Me.Hide
End Sub

Private Sub CommandButton2_Click()
'Trong Form tao 1 nut de Huy
kt = False
Unload Me
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
kt = False
End Sub

Chào bạn, code trên có thể áp dụng vào lĩnh vực nào ạ? tác dụng code giống như refesh thì phải

Nói code này phù hợp với một công việc nào đó cũng không đúng, vì code này không chuyên dụng trong bảng tính, nó chỉ xem như một tiện ích cho một công việc thường xuyên phải chạy một macro nào đó, thì code này áp dụng chạy macro tự động lặp đi lặp lại mà chúng ta không cần phải ấn nút. Và nó không có tác dụng như refresh. Chúng ta có thể đặt một code "refresh" hoặc code "Save" vào code này và đặt thời gian cho bảng tính thực hiện.

Tags: lặp lại code, gọi lại hàm tự động, vba tự động

Chúc các bạn thành công !

www.giaiphapexcel.com/diendan/threads/macro-ho%E1%BA%A1t-%C4%91%E1%BB%99ng-l%E1%BA%B7p-l%E1%BA%A1i-theo-th%E1%BB%9Di-%C4%91%E1%BB%8Bnh-s%E1%BA%B5n.111019/

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Khóa học SprinGO phù hợp

Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ

Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...

Xem khóa học
Chia sẻ: