Định thời gian cho phép chạy macro!

Liên hệ QC

nguyenxuanphu

Thành viên mới
Tham gia
4/4/08
Bài viết
5
Được thích
0
Nhờ các Bác giúp tôi điều chỉnh lại đoạn code sau:
'--------------------------------------------------------------------
Private Sub ktr_tg()
Dim songaycp, chuan, gioihan As Date
'Thoi gian cho phep chay macro
songaycp = 120
If DateDiff("D", 40179, Now) >= songaycp Then
'40179 la ngay 1/1/2010
gioihan = 40179 + songaycp
MsgBox "Macro chi cho phep chay den het ngay " & (gioihan) & "!"
Exit Sub
End If
End Sub
'--------------------------------------------------------------------
Sub chay_chuong_trinh()
'
ktr_tg
'
MsgBox "Chuc ban may man!"
End Sub
'--------------------------------------------------------------------
Diễn giải: Macro "chay_chuong_trinh" khi chạy sẽ gọi chương trình con "ktr_tg" để kiểm tra thời gian còn cho phép để chạy không?
Nhưng sau khi kiểm tra thời gian đã vượt ngày cho phép chương trình con "ktr_tg" không thực hiện dòng lệnh "Exit Sub" luôn, mà vẫn tiếp tục thực hiện dòng lệnh Msgbox " Chuc ban may man!" bình thường.
Nhờ các Bác chỉ giáo thêm! Xin cám ơn!
 
Bạn phải biết cách chạy tuần tự của các lệnh. Lưu ý là dòng lệnh Exit Sub là của Sub ktr_tg. Sau khi thực hiện lệnh này, chương trình tiếp tục chạy lệnh kế tiếp trong Sub Chay_chuong_trinh, là lệnh MsgBox "Chuc ban may man!".
Bạn có thể thay lệnh Exit Sub bởi lệnh End hoặc sửa lại như sau:
PHP:
Private Sub Chay_chuong_trinh()
    Dim songaycp, chuan, gioihan As Date
    'Thoi gian cho phep chay macro
    songaycp = 120
    If DateDiff("D", 40179, Now) >= songaycp Then
        '40179 la ngay 1/1/2010
        gioihan = 40179 + songaycp
        MsgBox "Macro chi cho phep chay den het ngay " & (gioihan) & "!"
    Else
        MsgBox "Chuc ban may man!"
    End If
End Sub
 
Upvote 0
Cám ơn bạn đã quan tâm đến vấn đề mình đang cần giải quyết. Tuy nhiên, tôi muốn tạo cái "private sub ktr_tg". Để trường hợp có nhiều macro, thì có thể gọi "ktr_tg" ra để sử dụng cho tiện lợi. Mà giải pháp bạn đưa ra sẽ lặp đi lặp lại các dòng lệnh kiểm tra thời gian.
 
Upvote 0
Cám ơn bạn đã quan tâm đến vấn đề mình đang cần giải quyết. Tuy nhiên, tôi muốn tạo cái "private sub ktr_tg". Để trường hợp có nhiều macro, thì có thể gọi "ktr_tg" ra để sử dụng cho tiện lợi. Mà giải pháp bạn đưa ra sẽ lặp đi lặp lại các dòng lệnh kiểm tra thời gian.
Trong code của bạn, lệnh Exit Sub chỉ có tác dụng với Sub ktr_tg mà thôi, chẳng ăn nhậu gì đến Sub chay_chuong_trinh cả
Muốn sửa lại theo tôi thì vầy:
PHP:
Public Chk As Boolean
Private Sub ktr_tg()
  Dim songaycp, chuan, gioihan As Date
  songaycp = 120
  If DateDiff("D", 40179, Now) >= songaycp Then
    gioihan = 40179 + songaycp
    MsgBox "Macro chi cho phep chay den het ngay " & Format(gioihan, "dd/mm/yyyy") & "!"
    Chk = True
  End If
End Sub
PHP:
Sub chay_chuong_trinh()
  ktr_tg
  If Chk Then Exit Sub
  MsgBox "Chuc ban may man!"
End Sub
Tức có thêm 1 biến Chk dạng Public để kiểm tra
-------------
Cũng có thể sửa sub ktr_tg thành 1 Funciton như sau:
PHP:
Private Function ktr_tg() As Boolean
  Dim songaycp, chuan, gioihan As Date
  songaycp = 120
  If DateDiff("D", 40179, Now) >= songaycp Then
    gioihan = 40179 + songaycp
    MsgBox "Macro chi cho phep chay den het ngay " & Format(gioihan, "dd/mm/yyyy") & "!"
    ktr_tg = True
  End If
End Function
PHP:
Sub chay_chuong_trinh()
  If ktr_tg Then Exit Sub
  MsgBox "Chuc ban may man!"
End Sub
Vân vân... và... vân vân...
 
Lần chỉnh sửa cuối:
Upvote 0
Cái này chỉ có ý nghĩa khi ngày giờ hệ thống chuẩn, nếu chỉnh đi thì vô tác dụng.
 
Upvote 0
Cám ơn bạn đã quan tâm đến vấn đề mình đang cần giải quyết. Tuy nhiên, tôi muốn tạo cái "private sub ktr_tg". Để trường hợp có nhiều macro, thì có thể gọi "ktr_tg" ra để sử dụng cho tiện lợi. Mà giải pháp bạn đưa ra sẽ lặp đi lặp lại các dòng lệnh kiểm tra thời gian.
Như vậy thì cách sửa nhanh nhất là thay lệnh Exit Sub bởi lệnh End. Khi gặp lệnh này, chương trình sẽ dừng lại mà chẳng cần quan tâm có bao nhiêu Sub đang chạy và Sub này được gọi từ đâu. Dù sao thì bạn vẫn cần quan tâm đến ý của bác Hướng: Chỉ cần chỉnh ngày giờ hệ thống thì Sub này chẳng có tác dụng gì.
 
Upvote 0
Web KT

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

Back
Top Bottom