Tạo đồng hồ hiển thị trên UserForm

Euler

Administrator
Thành viên BQT
Hôm nay tôi và mọi người sẽ cùng nhau tạo thử đồng hồ hiển thị trên UserForm nhé.
Sản phẩm mong muốn của chúng ta trông như thế này:
Bạn cần đăng nhập để thấy hình ảnh


Để tạo nên nó, chúng ta sẽ sử dụng:
  • UserForm
  • Label
Các bạn có thể sử dụng ngay code dưới đây:
Mã:
Private Sub UserForm_Activate()
    Dim counttime As Variant
   
    Do While UserForms.Count > 0
        counttime = Format$(Time(), "h:nn:ss")
      Label1.Caption = counttime
    DoEvents
    Loop
End Sub
Hoặc .
Bây giờ tôi sẽ giải thích code trên nhé.
Mã:
Private Sub UserForm_Activate()
Đồng hồ trên UserForm chỉ chạy khi sự kiện "Activate " trên UserForm xảy ra.
Mã:
Dim counttime As String
Biến số ở đây là String, tuy nhiên khai báo là Variant cũng không sao đâu.
Tiếp theo là phần xử lý logic:
Mã:
Do While UserForms.Count > 0
      counttime = Format$(Time(), "h:nn:ss")
      Label1.Caption = counttime
      DoEvents
Loop
Xử lý lần này chúng ta chỉ định điều kiện cho vòng lặp “Do …Loop” là:
Mã:
 UserForms.Count > 0
UserForms.Count sẽ trả về số lần mà form đang mở. Vì vậy giá trị lần này sẽ trả về là 1.
Trong khi điều kiện đó đúng, dù chỉ là một UserForm được mở ra, thì giá trị trả về sẽ lớn hơn 0, thì đoạn code bên trong vòng lặp Do … Loop luôn được thực thi.
Hàm thời gian Time sẽ trả về giá trị thời gian hiện tại, và thông qua hàm Format sẽ định dạng lại kiểu hiển thị là giờ-phút-giây.
Thông tin sẽ được hiển thị trên Label1.Caption, đến đây các bạn đã hiểu chưa?
Ở một số bài viết trên diễn đàn cũng đã nhắc tới DoEvents, đây là hàm chức năng chuyển điều khiển sang hệ điều hành trong quá trình xử lý. Hàm này có tác dụng cập nhật lại thông tin của các đối tượng trên UserForm. Nếu không sử dụng nó, mặc dù chúng ta gán Label.Caption là thời gian, tuy nhiên nó không hiển thị đầy đủ do máy tính không cập nhật thông tin này cho chúng ta xem.
Bạn bỏ nó đi rồi kiểm chứng kết quả nhé.
Bài viết dựa trên nguồn:
 
Top