Bảng tính không sử dụng được khi em dùng code chạy đồng hồ trên Label

  • Thread starter Thread starter lq177
  • Ngày gửi Ngày gửi
Liên hệ QC

lq177

Thành viên thường trực
Tham gia
22/4/10
Bài viết
203
Được thích
112
Em dùng code này để chạy đồng hồ trên label
Nhưng khi code này làm việc thì bảng tính của em tèo luôn, các anh chị giúp em khắc phục với nhé
Em cám ơn! (file kèm - code chưa chạy)
PHP:
Private Sub UserForm_Activate()


Dim kt As Double
dat = Now()
Do While dat > 0
UserForm1.Caption = "Hello!"
UserForm1.Label1.Caption = CStr(Format(dat, "hh mm ss"))
dat = dat + TimeValue("00:00:01")
kt = Timer
Do While Timer - kt < 1
DoEvents
Loop
Loop
End Sub
 

File đính kèm

Trong đoạn code của bạn có sự kiện
Mã:
Private Sub UserForm_Initialize()
Application.Visible = False
End Sub
Bạn xoá sự kiện này đi
nếu muốn Application.Visible = False thì có thể dưa vào sự kiện Private Sub UserForm_Activate()
Thân!
 
Upvote 0
Dù cho bạn chạy hay không chạy code thì khi bạn muốn vừa sử dụng trên Form, vừa trên sheet, thì thuộc tính của Form bạn phải chọn ShowModal = False mới có thể thực hiện trên Sheet khi Form đang load.
 
Upvote 0
Em dùng code này để chạy đồng hồ trên label
Nhưng khi code này làm việc thì bảng tính của em tèo luôn, các anh chị giúp em khắc phục với nhé
Em cám ơn! (file kèm - code chưa chạy)
PHP:
Private Sub UserForm_Activate()


Dim kt As Double
dat = Now()
Do While dat > 0
UserForm1.Caption = "Hello!"
UserForm1.Label1.Caption = CStr(Format(dat, "hh mm ss"))
dat = dat + TimeValue("00:00:01")
kt = Timer
Do While Timer - kt < 1
DoEvents
Loop
Loop
End Sub
Ai lại làm thế, có mà chết luôn!
Sửa lại (toàn bộ) cho bạn đây:
1> Code trong Module
PHP:
Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Public hWnd As Long
PHP:
Sub StartTimer()
  StopTimer
  SetTimer hWnd, 1, 1000, AddressOf TimeProc
End Sub
PHP:
Sub StopTimer()
  KillTimer hWnd, 1
End Sub
PHP:
Sub TimeProc()
  With UserForm1
    .Caption = Format(Now, "hh:mm:ss")
    .Label1.Caption = Format(Now, "hh:mm:ss")
  End With
End Sub
2> Code trong UserForm
PHP:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
PHP:
Private Sub UserForm_Initialize()
  Application.Visible = False
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  StartTimer
End Sub
PHP:
Private Sub UserForm_Terminate()
  Application.Visible = True
  StopTimer
End Sub
 

File đính kèm

Upvote 0
Cám ơn Bác NDU96081831 nhiều lắm. Nhưng có vẻ như là thơi gian nó hiển thị hơi chậm bác nhỉ, khi Form hiện lên thì đồng hồ không hiển thị tức thời cho lắm.
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn Bác NDU96081831 nhiều lắm. Nhưng có vẻ như là thơi gian nó hiển thị hơi chậm bác nhỉ, khi Form hiện lên thì đồng hồ không hiển thị tức thời cho lắm.
Để ý dòng lệnh này:
SetTimer hWnd, 1, 1000, AddressOf TimeProc
1000 = 1 giây chính là chu kỳ quét của code ---> Bạn giảm số này (chẳng hạn thành 100) thì sẽ thấy đồng hồ hiện ra lập tực
Tuy nhiên, càng giảm nhỏ số này thì cũng đồng nghĩa làm cho code hoạt động nhiều hơn ---> Nóng máy!!!
----------
Vậy để cải tiến cho hợp lý, ta sẽ giữ nguyên số 1000 đồng thời sửa lại sự kiện UserForm_Initialize tí xíu
PHP:
Private Sub UserForm_Initialize()
  Application.Visible = False
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  Label1.Caption = Format(Now, "hh:mm:ss")
  StartTimer
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Để ý dòng lệnh này:
SetTimer hWnd, 1, 1000, AddressOf TimeProc
1000 = 1 giây chính là chu kỳ quét của code ---> Bạn giảm số này (chẳng hạn thành 100) thì sẽ thấy đồng hồ hiện ra lập tực
Tuy nhiên, càng giảm nhỏ số này thì cũng đồng nghĩa làm cho code hoạt động nhiều hơn ---> Nóng máy!!!
----------
Vậy để cải tiến cho hợp lý, ta sẽ giữ nguyên số 1000 đồng thời sửa lại sự kiện UserForm_Initialize tí xíu
PHP:
Private Sub UserForm_Initialize()
  Application.Visible = False
  hWnd = FindWindow("ThunderDFrame", Me.Caption)
  Label1.Caption = Format(Now, "hh:mm:ss")
  StartTimer
End Sub

Sao em ghét cái đồng hồ trên Form ghê nha, cứ đôi lúc chớp chớp rất khó chịu, em mà muốn đồng hồ trên Form thì cứ việc nhúng thêm cái Flash đồng hồ vào là xong! Vừa đẹp, vừa sang, vừa hoành tráng lại chẳng cần viết code cho cực!
 
Upvote 0
Sao em ghét cái đồng hồ trên Form ghê nha, cứ đôi lúc chớp chớp rất khó chịu, em mà muốn đồng hồ trên Form thì cứ việc nhúng thêm cái Flash đồng hồ vào là xong! Vừa đẹp, vừa sang, vừa hoành tráng lại chẳng cần viết code cho cực!
Chỉ là tập dợt chơi thôi chứ nói thật, tôi viết code cho hàng đống loại đồng hồ mà chưa từng sử dụng bao giờ
Ẹc... Ẹc...
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom