Xin giúp đỡ về vòng lặp trong VBA

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Vũ Thị Thuý Ly

Thành viên mới
Tham gia
11/11/17
Bài viết
35
Được thích
5
Giới tính
Nữ
Sub test()
Dim i, j As Integer
i = 1
j = Cells(2, 1)
Do While i < 1
ActiveWorkbook.RefreshAll
If Cells(2, 1) >= 7 Then
With CreateObject("Wscript.Shell")
.Run "C:\Test\filekichhoat.bat", 5
End With
i = i + 1
Loop
End Sub

Em đang viết vòng lặp liên tục như thế này, giờ em muốn khi lệnh chạy xong ActiveWorkbook.RefreshAll nó sẽ dùng lại 30' rồi chạy tiếp, như file đính kèm. Kính mong các anh chị trên diễn đàn giúp đỡ. Em xin cám ơn và chúc diễn đàn nhiều sức khỏe
 

File đính kèm

Sub test()
Dim i, j As Integer
i = 1
j = Cells(2, 1)
Do While i < 1
ActiveWorkbook.RefreshAll
If Cells(2, 1) >= 7 Then
With CreateObject("Wscript.Shell")
.Run "C:\Test\filekichhoat.bat", 5
End With
i = i + 1
Loop
End Sub

Em đang viết vòng lặp liên tục như thế này, giờ em muốn khi lệnh chạy xong ActiveWorkbook.RefreshAll nó sẽ dùng lại 30' rồi chạy tiếp, như file đính kèm. Kính mong các anh chị trên diễn đàn giúp đỡ. Em xin cám ơn và chúc diễn đàn nhiều sức khỏe
Mình hỏi gpt thì nó trả lời thế này. Bạn thử kiểm tra xem được không?
Mã:
#If VBA7 Then
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub DelayExecution()
    Dim delayMinutes As Long
    delayMinutes = 30 ' Đặt thời gian dừng là 30 phút
    
    ' Chuyển đổi thời gian từ phút sang mili-giây
    Dim delayMilliseconds As Long
    delayMilliseconds = delayMinutes * 60 * 1000
    
    ' Dừng chương trình trong 30 phút
    Sleep delayMilliseconds
    
    ' Tiếp tục thực hiện các công việc khác ở đây
    ' ...
End Sub
 
Sub test()
Dim i, j As Integer
i = 1
j = Cells(2, 1)
Do While i < 1
ActiveWorkbook.RefreshAll
If Cells(2, 1) >= 7 Then
With CreateObject("Wscript.Shell")
.Run "C:\Test\filekichhoat.bat", 5
End With
i = i + 1
Loop
End Sub

Em đang viết vòng lặp liên tục như thế này, giờ em muốn khi lệnh chạy xong ActiveWorkbook.RefreshAll nó sẽ dùng lại 30' rồi chạy tiếp, như file đính kèm. Kính mong các anh chị trên diễn đàn giúp đỡ. Em xin cám ơn và chúc diễn đàn nhiều sức khỏe
Mình hay sử dụng đoạn mã này để tạm dừng việc thực hiện code và chờ trong 1 khoảng thời gian, bạn thử xem:
Application.Wait Now + TimeValue("00:00:00") 'Giờ : Phút : Giây
 
Mình hỏi gpt thì nó trả lời thế này. Bạn thử kiểm tra xem được không?
Mã:
#If VBA7 Then
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub DelayExecution()
    Dim delayMinutes As Long
    delayMinutes = 30 ' Đặt thời gian dừng là 30 phút
   
    ' Chuyển đổi thời gian từ phút sang mili-giây
    Dim delayMilliseconds As Long
    delayMilliseconds = delayMinutes * 60 * 1000
   
    ' Dừng chương trình trong 30 phút
    Sleep delayMilliseconds
   
    ' Tiếp tục thực hiện các công việc khác ở đây
    ' ...
End Sub
Cám ơn bạn, chúc bạn nhiều sức khỏe
Bài đã được tự động gộp:

Mình hay sử dụng đoạn mã này để tạm dừng việc thực hiện code và chờ trong 1 khoảng thời gian, bạn thử xem:
Application.Wait Now + TimeValue("00:00:00") 'Giờ : Phút : Giây
Cám ơn bạn, chúc bạn nhiều sức khỏe. Mình làm theo cái này và đã thành công.
 
Mình dùng application.ontime ...
Hiện đang dùng để download tuần tự các dữ liệu cho bảng tính
 
Ý mình là như này:
Gán 1 vùng dữ liệu là các khoảng thời gian cần chạy.
Sau đó, mình đặt giờ là đến giờ đó sẽ chạy code. VD:
Dim Timer1 as string
Timer1 = Format(Sheet1.Range("B6"), "hh:mm:ss")
Application.OnTime Timer1, "Chaycode"

Thì đến cái giờ trong Timer1 nó sẽ chạy code
Vậy trong khoảng thời gian mà chưa đến Timer1 thì mình vẫn sử dụng máy tính bình thường cho các công việc khác. Chứ nếu đặt delay hay wait thì sẽ không làm thêm được gì
 
Ý mình là như này:
Gán 1 vùng dữ liệu là các khoảng thời gian cần chạy.
Sau đó, mình đặt giờ là đến giờ đó sẽ chạy code. VD:
Dim Timer1 as string
Timer1 = Format(Sheet1.Range("B6"), "hh:mm:ss")
Application.OnTime Timer1, "Chaycode"

Thì đến cái giờ trong Timer1 nó sẽ chạy code
Vậy trong khoảng thời gian mà chưa đến Timer1 thì mình vẫn sử dụng máy tính bình thường cho các công việc khác. Chứ nếu đặt delay hay wait thì sẽ không làm thêm được gì
Cám ơn bác. Để em thử xem, có gì mong bác chỉ giáo thêm được không ạ
 
Web KT

Bài viết mới nhất

Back
Top Bottom