Chris đang phát triển một macro Excel hiển thị một loạt các mục cho người dùng. Anh ấy muốn giới thiệu độ trễ trong macro, chẳng hạn, một giây giữa mỗi phần thông tin mà anh ấy hiển thị, và anh ấy tự hỏi liệu có cách nào dễ dàng để thêm độ trễ như vậy không.

Có một số cách bạn có thể đưa thời gian trễ vào macro của mình. Cách truyền thống là sử dụng phương thức Wait, được sử dụng với đối tượng Application. Bạn sử dụng nó để giới thiệu độ trễ một giây theo cách này:

Application.Wait (Now() + TimeValue("0:00:01"))

Lưu ý rằng tham số được phương thức Wait yêu cầu là thời gian mà bạn muốn macro của mình tiếp tục chạy. Nói cách khác, đó là thời gian “đợi cho đến khi”. Đó là lý do tại sao ví dụ trên sử dụng thời gian hiện tại (từ chức năng Now) tăng thêm một giây.

Nếu bạn không muốn sử dụng phương thức Chờ (vì bất kỳ lý do gì), bạn cũng có thể sử dụng vòng lặp để tiết kiệm thời gian của mình:

Dim WaitTime As Date

WaitTime = Now() + TimeValue("0:00:01")

Do While Now < WaitTime Loop

Một biến thể của cách tiếp cận này dựa vào hàm Bộ hẹn giờ, hàm này trả về số giây kể từ nửa đêm:

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint Loop

Khi sử dụng vòng lặp theo cách này, có lẽ sẽ không thành vấn đề lớn nếu bạn chỉ trì hoãn một giây. Nếu bạn cần trì hoãn lâu hơn, có thể bạn sẽ muốn đặt hàm DoEvents vào vòng lặp:

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint     DoEvents Loop

Lý do rất đơn giản — nếu bạn không làm như vậy, thì Excel sẽ không phản hồi bất kỳ sự kiện nào khác khi ở trong vòng lặp. Điều này có thể làm cho hệ thống của bạn có vẻ như bị treo hoặc bị treo trong khi chờ đợi.

Nếu bạn cần chi tiết hơn về độ trễ của mình (xuống đến phạm vi mili giây), bạn có thể dựa vào chức năng Sleep, là một phần của Windows API. (Nó không phải là một phần của VBA.) Để sử dụng nó, bạn sẽ cần phải bao gồm một khai báo ở đầu mô-đun của bạn, trong vùng khai báo, trước bất kỳ thủ tục nào:

#If VBA7 And Win64 Then     Public Declare PtrSafe Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#Else     Public Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#End If

Sau đó, trong macro của bạn, bạn có thể sử dụng hàm Sleep theo cách sau:

Sleep(1000)

Thao tác này sẽ tạm dừng hệ thống trong 1000 mili giây, tức là 1 giây.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (5134) áp dụng cho Microsoft Excel 2007, 2010, 2013 và 2016.