Tối ưu hộ code

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

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Tôi thấy form này cũng khá hay, file của Minhlev.
Code sau là khi y update thì kiểm tra ngày có hợp lệ
Nhờ các bạn tôi ưu hộ. Cám ơn
Private Sub y_AfterUpdate() 'MinhLev
If Me.m.Value > 12 Then MsgBox "Sai thang", , "Mr Minh"
If Me.m.Value = 2 And Me.d.Value > 29 Then MsgBox "Sai ngay", , "Mr Minh"
If Me.m.Value = 1 And Me.m.Value = 3 And Me.m.Value = 5 And _
Me.m.Value = 7 And Me.m.Value = 8 And Me.m.Value = 10 And Me.m.Value = 12 _
And Me.d.Value > 31 Then MsgBox "Sai ngay", , "Mr Minh"
If Me.m.Value = 4 And Me.m.Value = 6 And Me.m.Value = 9 And _
Me.m.Value = 11 And Me.d.Value > 30 Then MsgBox "Sai ngay", , "Mr Minh"
If Len(Me.y.Value) >= 5 Or Len(Me.y.Value) = 3 Or Len(Me.y.Value) = 1 _
Then MsgBox "Sai nam", , "Mr Minh"
End Sub
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Mã:
mo = Array(31, HO, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
Cái của LearnExcel sai nơi này, ->màu vàng
Tôi thhử vận dụng ý Bác Sa làm thử mà chả tích sự gì, ôi sao ta ngu quá, do ta o có căn bản.
Các bạn giúp tiếp, tạo thêm 1 txtNgay
Mã:
Option Explicit
Private Sub Ngay_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If IsDate(Me.Ngay) = False Then
            MsgBox ("Sai")
            d.SetFocus
    Else
            Cells(5, 1).Value = DateSerial(Year(Me.Ngay), Month(Me.Ngay), Day(Me.Ngay))
            Me.d = ""
            Me.m = ""
            Me.y = ""
    End If
End Sub
Private Sub y_AfterUpdate()
Me.Ngay.Value = Me.d.Value & "/" & Me.m.Value & "/" & Me.y.Value
End Sub
Private Sub d_AfterUpdate()
    If Me.d.Value <> "" Then
        Me.Ngay.Value = Me.d.Value & "/" & Me.m.Value & "/" & Me.y.Value
    End If
End Sub
Private Sub m_AfterUpdate()
    If Me.m.Value <> "" And Me.d.Value <> "" Then
        Me.Ngay.Value = Me.d.Value & "/" & Me.m.Value & "/" & Me.y.Value
    End If
End Sub
To Hiếu: Sorry, do chưa xem file
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
ThuNghi đã viết:
Cái của LearnExcel sai nơi này, ->màu vàng
Tôi thhử vận dụng ý Bác Sa làm thử mà chả tích sự gì, ôi sao ta ngu quá, do ta o có căn bản.
Các bạn giúp tiếp, tạo thêm 1 txtNgay

Ủa, chứ không phải là dùng như em thì được rồi à ????@$@!^%@$@!^%@$@!^%
(1textbox thôi, còn cái vụ ngày đã có UF CD(Check Day) đảm nhiệm)

Thân!
 
Upvote 0
ThuNghi đã viết:
Cái của LearnExcel sai nơi này, ->màu vàng


To Hiếu: Sorry, do chưa xem file

XIN LỖI CÁC BÁC PHẢI BỎ CÁI HÀM YEAR ĐI MỚI ĐÚNG, TÔI ĐÃ VIẾT LẠI CHO GỌN HƠN, BỎ LUÔN if...THEN CHO KHỎE

Mã:
Private Sub y_AfterUpdate()
    Dim kq As String
    Dim HO As Integer, mo As Variant
    '----------------------------
    Const wrongyear = "Nhap sai nam", wrongmonth = "Nhap sai thang", wrongday = "Nhap sai nagy "

    y = Me.y.Value
    m = Me.m.Value
    d = Me.d.Value
    
    If y > 9999 Or y < 1 Then ' tuy yeu cau ve nam vd 1900 - 2099
        kq = wrongyear
        Exit Sub
    End If
    If m < 1 Or m > 12 Then
        kq = wrongmonth
        Exit Sub
    End If

    [COLOR="SeaGreen"]'If [SIZE="5"][COLOR="Red"]Year[/COLOR][/SIZE](y) Mod 4 = 0 And ([COLOR="#ff0000"][SIZE="5"]Year[/SIZE][/COLOR](y) Mod 100 <> 0) Or ([COLOR="Red"][SIZE="4"]Yea[/SIZE][/COLOR]r(y) Mod 400 = 0) Then HO = 29 Else HO = 28[/COLOR]

    [COLOR="#2e8b57"]'If y Mod 4 = 0 And (y Mod 100 <> 0) Or (y Mod 400 = 0) Then HO = 29 Else HO = 28[/COLOR]
    [COLOR="SeaGreen"]'mo = Array(31, HO, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[/COLOR]
mo = Array(31, 28 - CInt(y Mod 4 = 0 And (y Mod 100 <> 0) Or (y Mod 400 = 0)), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    
    EOM = mo(m - 1)
    
    If Me.d < 1 Or Me.d > EOM Then
        kq = wrongday
        Exit Sub
    End If

    If Len(kq) > 0 Then MsgBox kq, , "Mr Minh"
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom