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ủ của VBA làm gì?

SLEEP như chính cái tên của nó đã nói lên "ngủ một lúc", "nghỉ ngơi một lúc", "tạm dừng trong thời gian", thời gian nghỉ một lúc "v.v ... Chức năng Sleep 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 thay vì chúng tôi 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 các tệp DLL của Windows, vì vậy chúng ta cần khai báo danh pháp của API trước khi bắt đầu chương trình con trong vba.

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

Mã:

# If VBA7 Then Public Khai báo PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Đối với phiên bản 64-Bit của Excel # Khác Khai báo công khai 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.

Bạn có thể tải xuống Mẫu VBA Sleep Excel này tại đây - Mẫu VBA Sleep Excel

Ví dụ 1

Sau khi mã API được dán trước khi bắt đầu quy trình 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ã:

 Làm mờ thời gian bắt đầu theo chuỗi Làm mờ thời gian kết thúc dưới dạng chuỗi 

Đối với biến StartTime 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 tôi 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 vì vậy để 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ờ sử dụng biến EndTime thứ hai và ấn định 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 ta 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 ký hiệu bộ đệm.

Sau 10 giây, nó sẽ bắt đầu tiếp tục lại mã, vì vậy, nó sẽ hiển thị thời gian kết thúc tức là sau khi chờ 10 giây thì 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 sự khác biệt 10 giây là ở đó. 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 

Mã này sẽ hiển thị cho bạn 2 hộp thông báo, hộp đầu tiên hiển thị thời gian bắt đầu và hộp 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 không hoạt động.


$config[zx-auto] not found$config[zx-overlay] not found