Hàm Sleep VBA trong Excel để tạm dừng mã macro của bạn

Hàm Sleep VBA trong Excel

Chức năng VBA Sleep là một chức năng cửa sổ hiện diện trong các tệp DLL của cửa sổ, được sử dụng để dừng hoặc tạm dừng thủ tục macro chạy trong một khoảng thời gian nhất định sau một khoảng thời gian nhất định chúng ta có thể tiếp tục chương trình.

Có những tình huống mà chúng ta cần tạm dừng quá trình chạy macro của mình để hoàn thành các bộ nhiệm vụ khác. Các tập hợp nhiệm vụ khác có thể là một phần của mã hóa của chúng tôi hoặc một phần của quy trình macro khác, hoặc nó có thể là đầu vào cho macro excel hiện tại. Làm thế nào bạn có thể tạm dừng chương trình khi nó đang chạy? Chúng tôi có thể tạm dừng mã thủ tục trong một thời gian do người dùng chỉ định và sau một khoảng thời gian nhất định chúng tôi có thể tiếp tục chương trình. Chúng ta có thể làm điều này trong VBA bằng cách sử dụng hàm SLEEP.

Chức năng Ngủ trong VBA làm gì?

SLEEP, như chính cái tên đã nói, “ngủ một lúc”, “nghỉ ngơi một lúc”, “tạm dừng một lúc,” nghỉ một lúc, ”v.v… Chức năng ngủ cho phép người dùng tạm dừng mã macro của chúng tôi trong mili giây . Sử dụng điều này, chúng tôi có thể trì hoãn quá trình mã macro.

Nếu bạn nghĩ rằng chúng tôi có một chức năng tích hợp có tên là SLEEP, thì bạn đã nhầm vì trong VBA không có chức năng này. Đúng hơn, chúng ta có một chức năng gọi là Sleep as a windows function. Bằng cách nhập một bộ mã đặc biệt, chúng ta thực sự có thể gọi hàm này trong VBA. Trên thực tế, nó là một hàm hiện diện bên trong tệp DLL của Windows, vì vậy chúng ta cần khai báo danh pháp API trước khi bắt đầu chương trình con trong VBA.

Dưới đây là mã VBA.

Mã:

#If VBA7 Sau đó Khai báo Công khai PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Đối với phiên bản 64-Bit của Excel #Else Công khai Khai báo Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) "Đối với phiên bản 32-Bit của Excel #End If

Sao chép ở trên và dán vào mô-đun của bạn trước khi bạn bắt đầu viết mã macro. Nó nên được dán như thế này trong mô-đun của bạn.

Thí dụ

Trước khi tôi chỉ cho bạn cách viết mã, hãy để tôi nói cho bạn biết thêm một chút về chức năng ngủ. Nó làm chậm quá trình tính bằng mili giây. Vì vậy, 1 giây bằng 1000 mili giây, nếu bạn muốn tạm dừng trong 10 giây, thì nó phải là 10000 mili giây.

Ví dụ 1

Khi mã API được dán trước khi bắt đầu thủ tục Phụ, hãy tạo một tên macro.

Mã:

#Sub Sleep_Example1 () End Sub

Khai báo hai biến dưới dạng một chuỗi.

Mã:

Dim StartTime như chuỗi Dim EndTime As String

Đối với biến StartTime , hãy gán giá trị của hàm TIME. Lưu ý: Hàm TIME trong excel trả về thời gian hiện tại.

Mã:

StartTime = Thời gian

Bây giờ chúng ta sẽ hiển thị thông báo này trong hộp thông báo VBA.

Mã:

StartTime = Thời gian khởi động MsgBox

Bây giờ chúng ta sẽ tạm dừng mã trong 10 giây bằng cách sử dụng chức năng ngủ. Như tôi đã nói, nó tạm dừng mã trong mili giây, do đó, tạm dừng trong 10 giây. Chúng ta cần sử dụng 10000 mili giây.

Mã:

Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) End Sub

Bây giờ hãy sử dụng biến thứ hai, EndTime và gán thời gian hiện tại.

Mã:

Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) EndTime = Time MsgBox EndTime End Sub

Bây giờ hai biến StartTimeEndTime, sẽ giữ thời gian bắt đầu và thời gian kết thúc macro. Chạy macro này; lúc đầu, chúng tôi sẽ thấy thời gian bắt đầu macro, tức là thời gian hiện tại trong hệ thống của bạn.

Nhấp vào OK. Nó sẽ ngủ trong 10 giây. Bạn có thể thấy biểu tượng bộ đệm.

Sau 10 giây, nó sẽ bắt đầu tiếp tục lại mã, do đó nó sẽ hiển thị thời gian kết thúc, tức là sau khi chờ 10 giây, giờ hiện tại là bao nhiêu.

Bây giờ bạn có thể thấy macro bắt đầu lúc 10:54:14 và kết thúc lúc 10:54:24, tức là, chính xác là có sự khác biệt 10 giây. Trong 10 giây đó, VBA tạm dừng mã đang chạy.

Ví dụ # 2 - Chức năng Ngủ trong Vòng lặp

Sleep được sử dụng tốt nhất với các vòng lặp trong VBA. Ví dụ: tôi muốn chèn số sê-ri từ 1 đến 10 bằng vòng lặp Do while trong VBA.

Sau khi chèn một số, mã của tôi sẽ đợi trong 3 giây, vì vậy khi vòng lặp chạy 10 lần, tổng cộng sẽ là 30 giây.

Mã:

Sub Sleep_Example2 () Dim k As Integer k = 1 Do While k <= 10 Cells (k, 1) .Value = kk = k + 1 Sleep (3000) '1000 mili giây là 1 giây nên 3000 tương đương với 3 giây Kết thúc vòng lặp Phụ

Chạy mã này và bạn phải đợi tối thiểu 30 giây để hoàn tất quá trình.

Để theo dõi thời gian chính xác, hãy sử dụng mã dưới đây.

Mã:

Sub Sleep_Example2 () Dim k As Integer Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox "Your Code Started at" & StartTime k = 1 Do While k <= 10 Cells (k, 1) .Value = kk = k + 1 Sleep (3000) '1000 mili giây là 1 giây vì vậy 3000 tương đương với 3 giây Loop EndTime = Time MsgBox "Your Code Ended at" & EndTime End Sub

Đoạn mã này sẽ hiển thị cho bạn 2 ô thông báo, ô thứ nhất hiển thị thời gian bắt đầu, ô thứ hai hiển thị thời gian kết thúc.

Lưu ý: Trong khi chạy mã này, bạn không thể sử dụng excel. Ngay cả phím thoát cũng sẽ không hoạt động.

thú vị bài viết...