Đôi khi chương trình chạy quá lâu, người dùng trở nên sốt ruột và không biết chương trình có bị lỗi hay treo giữa chừng hay không, cảm giác rất lo lắng.
Vì thế, người code cần thiết kế chương trình để đưa ra thông báo xin hãy chờ một chút, chương trình đang xử lý. Điều này cũng giống như ta có hẹn một ai đó, nếu như cứ đứng chờ mà chẳng có liên lạc nào từ họ thì thật là sốt ruột. Nhưng nếu họ liên lạc và nói, họ vẫn đang trên đường tới chỗ hẹn, xin hãy chờ một chút, dù là phải chờ đi nữa nhưng cảm giác cũng nguôi đi phần nào.
Vì vậy sau đây tôi giới thiệu 3 phương pháp hiện cảnh báo này.
1. Thiết kế trên sheet.
Đây là cách đơn giản nhất. Chúng ta tạo ra một sheet có tên là sheet3. Ở đây, chúng ta cho sẵn một thông báo:
Nội dung sheet3:
Code của chúng ta:
Đây là một kỹ thuật đơn giản, tuy nhiên sheet3 được hiển thị ra sẽ gây khó khăn cho thao tác của macro. Giả sử macro đang thao tác với sheet1. Nhưng thứ hiện ra lại là sheet 3.
Ngoài ra nếu chỉ hiển thị vui lòng đợi, thì vẫn là chưa đủ. Người dùng cũng muốn biết trạng thái hiện tại bây giờ đang là như thế nào. Cũng tương tự như cuộc hẹn hò, đối phương đã đi tới đâu rồi, đó là thông tin người đợi muốn biết.
2. Cho hiển thị trên statusbar:
Ý tưởng này không mới, trên diễn đàn đã có một bài viết sử dụng statusbar:
Bây giờ tôi có code như sau:
ReturnSheet là sheet mà macro sẽ thao tác để xử lý số liệu, đây là sheet đang được Active.
Tuy nhiên sau đó chúng ta sẽ cho sheet 3 hiện ra, bởi ở sheet này có thông báo mà chúng ta thiết kế sẵn, như đã trình bày ở 1.
(3): Chúng ta không cho cập nhật màn hình. Tức là những gì diễn ra trên màn hình, từ nay sẽ không được cập nhật, những gì hiện trước mắt người dùng sẽ là hình ảnh sheet 3, là sheet có nội dung thông báo.
(4): Chúng ta quay trở về sheet mà macro sẽ thao tác. Tuy nhiên những gì hiện trước mắt người dùng vẫn là sheet 3, do chúng ta đã tắt cập nhật màn hình ở (3).
Sau khi xử lý xong ta lại cho màn hình được cập nhật bình thường, đó là (5).
(Còn nữa)
Nguồn tham khảo và dịch:
Vì thế, người code cần thiết kế chương trình để đưa ra thông báo xin hãy chờ một chút, chương trình đang xử lý. Điều này cũng giống như ta có hẹn một ai đó, nếu như cứ đứng chờ mà chẳng có liên lạc nào từ họ thì thật là sốt ruột. Nhưng nếu họ liên lạc và nói, họ vẫn đang trên đường tới chỗ hẹn, xin hãy chờ một chút, dù là phải chờ đi nữa nhưng cảm giác cũng nguôi đi phần nào.
Vì vậy sau đây tôi giới thiệu 3 phương pháp hiện cảnh báo này.
1. Thiết kế trên sheet.
Đây là cách đơn giản nhất. Chúng ta tạo ra một sheet có tên là sheet3. Ở đây, chúng ta cho sẵn một thông báo:
Nội dung sheet3:
Bạn cần đăng nhập để thấy đính kèm
Code của chúng ta:
Mã:
Sub Sample1()
Worksheets("Sheet3").Activate
''Duoi day la doan code gay mat thoi gian
'Code bat ky cua cac ban
'Tro ve giao dien ban dau
Worksheets("Sheet1").Activate
End Sub
Ngoài ra nếu chỉ hiển thị vui lòng đợi, thì vẫn là chưa đủ. Người dùng cũng muốn biết trạng thái hiện tại bây giờ đang là như thế nào. Cũng tương tự như cuộc hẹn hò, đối phương đã đi tới đâu rồi, đó là thông tin người đợi muốn biết.
2. Cho hiển thị trên statusbar:
Ý tưởng này không mới, trên diễn đàn đã có một bài viết sử dụng statusbar:
Bạn cần đăng nhập để thấy link
Bây giờ tôi có code như sau:
Mã:
Sub Sample2()
Dim TotalSize As Long, buf As String, ReturnSheet As Worksheet
Set ReturnSheet = ActiveSheet ''(1)
Worksheets("Sheet3").Activate ''(2)
Application.ScreenUpdating = False ''(3)
ReturnSheet.Activate ''(4)
''Xu ly duoi day la xu ly mat thoi gian
buf = Dir("C:\Windows\System32\*.*")
Do While buf <> ""
TotalSize = TotalSize + FileLen("C:\Windows\System32\" & buf)
Application.StatusBar = buf & " dang duoc xu ly..."
ActiveCell = TotalSize
buf = Dir()
Loop
Application.ScreenUpdating = True ''(5)
Application.StatusBar = False
End Sub
Bạn cần đăng nhập để thấy đính kèm
ReturnSheet là sheet mà macro sẽ thao tác để xử lý số liệu, đây là sheet đang được Active.
Tuy nhiên sau đó chúng ta sẽ cho sheet 3 hiện ra, bởi ở sheet này có thông báo mà chúng ta thiết kế sẵn, như đã trình bày ở 1.
(3): Chúng ta không cho cập nhật màn hình. Tức là những gì diễn ra trên màn hình, từ nay sẽ không được cập nhật, những gì hiện trước mắt người dùng sẽ là hình ảnh sheet 3, là sheet có nội dung thông báo.
(4): Chúng ta quay trở về sheet mà macro sẽ thao tác. Tuy nhiên những gì hiện trước mắt người dùng vẫn là sheet 3, do chúng ta đã tắt cập nhật màn hình ở (3).
Sau khi xử lý xong ta lại cho màn hình được cập nhật bình thường, đó là (5).
(Còn nữa)
Nguồn tham khảo và dịch:
Bạn cần đăng nhập để thấy link