Điều kiện để RefEdit khi chọn chỉ nằm trong 1 phạm vi cột cho trước.

Liên hệ QC

Thanh Bình PV

Thành viên hoạt động
Tham gia
30/10/19
Bài viết
151
Được thích
19
Em có 1 Form gồm 3 RefEdit và 1 Button.
1. RefEdit1 sẽ chỉ chọn trong vùng từ cột B tới cột H (bắt buộc từ cột B tới cột H)
2. RefEdit2 sẽ chỉ chọn trong vùng từ cột D tới cột K (bắt buộc từ cột D tới cột K)
3. RefEdit3 sẽ chỉ chọn trong vùng từ cột C tới cột F (bắt buộc từ cột C tới cột F)

Em có sử dụng hàm tại bài #3 này. Nhưng nếu ở RefEdit1 em chọn từ cột C tới cột F thì kết quả trả về true. tương tự với RefEdit2 và RefEdit3.
Cụ thể code em muốn như sau:

Chỉ cần 1 trong 3 RefEdit có giá trị thì sẽ gọi các sub tương ứng..
RefEdit1 có giá trị => gọi sub ABC
RefEdit2 có giá trị => gọi sub BBB
RefEdit3 có giá trị => gọi sub AAA

Ví dụ:
- RefEdit1 = "B1:H20" , RefEdit2 = "" , RefEdit3 = "" thì sẽ gọi sub ABC.
- RefEdit1 = "B1:H20" , RefEdit2 = "D1:K50" , RefEdit3 = "" thì sẽ gọi sub ABC và sub BBB

Và sẽ thông báo 1 lần là File 1 (RefEdit1) - File 2 (RefEdit2) Hoan Thanh !!!
Trường hợp nếu chọn sai cột thì sẽ thông báo lỗi.

Mong các anh/chị giúp em ạ.
- Hàm kiểm tra phạm vi
Mã:
Function InRange(Rng1, rng2) As Boolean
'   Returns True if rng1 is a subset of rng2
    InRange = False
    If Rng1.Parent.Parent.Name = rng2.Parent.Parent.Name Then
        If Rng1.Parent.Name = rng2.Parent.Name Then
            If Union(Rng1, rng2).Address = rng2.Address Then
                InRange = True
            End If
        End If
    End If
End Function
- Code trong Form:
Mã:
Private Sub CommandButton1_Click()
Dim kiemtra_1 As Boolean, kiemtra_2 As Boolean, kiemtra_3 As Boolean
Dim kq1 As String, kq2 As String, kq3 As String
Dim ValidRange1 As Range, ValidRange2 As Range, ValidRange3 As Range, UserRange1 As Range, UserRange2 As Range, UserRange3 As Range
On Error Resume Next
Set ValidRange1 = Range("B1:H10000")
Set ValidRange2 = Range("D1:K10000")
Set ValidRange3 = Range("C1:F10000")

Set UserRange1 = Range(RefEdit1.Value)
Set UserRange2 = Range(RefEdit2.Value)
Set UserRange3 = Range(RefEdit3.Value)

If RefEdit1.Value <> "" Then
    If InRange(UserRange1, ValidRange1) = True Then
        kiemtra_1 = True
        Call ABC
    Else
        kiemtra_1 = False
    End If
End If

If RefEdit2.Value <> "" Then
    If InRange(UserRange2, ValidRange2) = True Then
        kiemtra_2 = True
        Call BBB
    Else
        kiemtra_2 = False
    End If
End If

If RefEdit3.Value <> "" Then
    If InRange(UserRange3, ValidRange3) = True Then
        kiemtra_3 = True
        Call AAA
    Else
        kiemtra_3 = False
    End If
End If

If kiemtra_1 = True Then kq1 = "File 1"
If kiemtra_2 = True Then kq2 = "File 2"
If kiemtra_3 = True Then kq3 = "File 3"

Select Case True
    Case kiemtra_1
        MsgBox kq1 & " - " & kq2 & " - " & kq3 & " - " & " Hoan Thanh!!!"
    Case kiemtra_2
        MsgBox kq1 & " - " & kq2 & " - " & kq3 & " - " & " Hoan Thanh!!!"
    Case kiemtra_3
        MsgBox kq1 & " - " & kq2 & " - " & kq3 & " - " & " Hoan Thanh!!!"
End Select

If RefEdit1.Value = "" And RefEdit2.Value = "" And RefEdit3.Value = "" Then
    MsgBox "Vui long nhap gia tri."
End If

If kiemtra_1 = False Then MsgBox "Loi cot !!!" & vbNewLine & "Ghi chu: chi tu cot B toi H"
If kiemtra_2 = False Then MsgBox "Loi cot !!!" & vbNewLine & "Ghi chu: chi tu cot D toi K"
If kiemtra_3 = False Then MsgBox "Loi cot !!!" & vbNewLine & "Ghi chu: chi tu cot C toi F"
End Sub

Sub ABC()
MsgBox "ABC"
End Sub

Sub BBB()
MsgBox "BBB"
End Sub

Sub AAA()
MsgBox "AAA"
End Sub

Private Sub RefEdit1_Change()
On Error Resume Next
Dim Rng1 As Range, RngAdd1 As String, RngAdd2 As String
RngAdd1 = Me.RefEdit1.Value
Set Rng1 = Range(RngAdd1)
If Not Rng1 Is Nothing Then
    RngAdd2 = Rng1.Address
    If RngAdd2 <> RngAdd1 Then Me.RefEdit1.Value = RngAdd2
End If
End Sub
 

File đính kèm

  • Test.xlsm
    21.3 KB · Đọc: 10
Lần chỉnh sửa cuối:
Em có 1 Form gồm 3 RefEdit và 1 Button.
1. RefEdit1 sẽ chỉ chọn trong vùng từ cột B tới cột H (bắt buộc từ cột B tới cột H)
2. RefEdit2 sẽ chỉ chọn trong vùng từ cột D tới cột K (bắt buộc từ cột D tới cột K)
3. RefEdit3 sẽ chỉ chọn trong vùng từ cột C tới cột F (bắt buộc từ cột C tới cột F)

Em có sử dụng hàm tại bài #3 này. Nhưng nếu ở RefEdit1 em chọn từ cột C tới cột F thì kết quả trả về true. tương tự với RefEdit2 và RefEdit3.
Cụ thể code em muốn như sau:

Chỉ cần 1 trong 3 RefEdit có giá trị thì sẽ gọi các sub tương ứng..
Ví dụ:
- RefEdit1 = "B1:H20" , RefEdit2 = "" , RefEdit3 = "" thì sẽ gọi sub ABC.
- RefEdit1 = "B1:H20" , RefEdit2 = "D1:K50" , RefEdit3 = "" thì sẽ gọi sub ABC và sub BBB

...
Ví dụ:
- RefEdit1 = "B1:H20" , RefEdit2 = "" , RefEdit3 = "" thì sẽ gọi sub ABC.
- RefEdit1 = "B1:H20" , RefEdit2 = "D1:K50" , RefEdit3 = "" thì sẽ gọi sub ABC và sub BBB
Sao lại ví dụ 2 trường hợp đó? Dù có trong đoạn code bên dưới hay không thì bạn phải phải trình bày tường minh TẤT CẢ các trường hợp mà bạn muốn để người giúp bạn không phải nhọc công truy tìm và đoán ý bạn.
 
Upvote 0
Ví dụ:
- RefEdit1 = "B1:H20" , RefEdit2 = "" , RefEdit3 = "" thì sẽ gọi sub ABC.
- RefEdit1 = "B1:H20" , RefEdit2 = "D1:K50" , RefEdit3 = "" thì sẽ gọi sub ABC và sub BBB
Sao lại ví dụ 2 trường hợp đó? Dù có trong đoạn code bên dưới hay không thì bạn phải phải trình bày tường minh TẤT CẢ các trường hợp mà bạn muốn để người giúp bạn không phải nhọc công truy tìm và đoán ý bạn.
Này mình chỉ ví dụ cho đoạn câu nói này "Chỉ cần 1 trong 3 RefEdit có giá trị thì sẽ gọi các sub tương ứng.."
Mình nghĩ việc này không có gì đoán ý cả. RefEdit nào có giá trị thì gọi sub đó. Giả sử trường hợp mình có 6,7 cái RefEdit thì mình phải nêu toàn bộ ra thì biết bao nhiêu trường hợp mà kể.
Họa chăng mình thiếu ở đây là:
RefEdit1 có giá trị => gọi sub ABC
RefEdit2 có giá trị => gọi sub BBB
RefEdit3 có giá trị => gọi sub AAA
 
Upvote 0
Này mình chỉ ví dụ cho đoạn câu nói này "Chỉ cần 1 trong 3 RefEdit có giá trị thì sẽ gọi các sub tương ứng.."
Mình nghĩ việc này không có gì đoán ý cả. RefEdit nào có giá trị thì gọi sub đó. Giả sử trường hợp mình có 6,7 cái RefEdit thì mình phải nêu toàn bộ ra thì biết bao nhiêu trường hợp mà kể.
Họa chăng mình thiếu ở đây là:
RefEdit1 có giá trị => gọi sub ABC
RefEdit2 có giá trị => gọi sub BBB
RefEdit3 có giá trị => gọi sub AAA
Bạn thấy chưa, nói đơn giản như bây giờ thì ai cũng hiểu, có cần ví dụ gì đâu. --=0
 
Upvote 0
Em có viết thử 1 đoạn code dựa trên Function InRange để kiểm tra chính xác phạm vi cột đã chọn. Mong được giúp đỡ và nhận xét ạ.
Mã:
Function CheckColumns(rng1, rng2) As Boolean
'   Returns True if rng1 = rng2
    CheckColumns = False

    If rng1.Count = rng2.Count Then
        If rng1.Column = rng2.Column Then
            CheckColumns = True
        End If
    End If
End Function
 
Upvote 0
Em có viết thử 1 đoạn code dựa trên Function InRange để kiểm tra chính xác phạm vi cột đã chọn. Mong được giúp đỡ và nhận xét ạ.
Function CheckColumns(rng1, rng2) As Boolean
' Returns True if rng1 = rng2
CheckColumns = False

If rng1.Count = rng2.Count Then
If rng1.Column = rng2.Column Then
CheckColumns = True
End If
End If
End Function
Code đúng hay sai thì còn tuỳ vào khái niệm, thế nào là rng1 = rng2.

Theo định nghĩa của bạn thì vùng A1:B10 có = vùng A100:A119 không? Nếu KHÔNG, tức vùng A1:B10 <> vùng A100:A119 thì code hàm CheckColumns sai.
 
Upvote 0
Hàm ở bài #5 thì A1:C1 = A5:A7 luôn.
 
Upvote 0
Code đúng hay sai thì còn tuỳ vào khái niệm, thế nào là rng1 = rng2.

Theo định nghĩa của bạn thì vùng A1:B10 có = vùng A100:A119 không? Nếu KHÔNG, tức vùng A1:B10 <> vùng A100:A119 thì code hàm CheckColumns sai.
Em chỉ kiểm tra cột thôi ạ. A1:B10 (cột A và B) <> A100:A119 (chỉ cột A)
Hàm ở bài #5 thì A1:C1 = A5:A7 luôn.
Em sửa lại hàm như sau:
Mã:
Function CheckColumns(rng1, rng2) As Boolean
    CheckColumns = False
    Dim Value1, Value2 As Range
    Set Value1 = Range(rng1).Columns
    Set Value2 = Range(rng2).Columns

    If Value1.Count = Value2.Count Then
        If Value1.Column = Value2.Column Then
            CheckColumns = True
        End If
    End If
End Function
Sub kiểm tra:
Mã:
Sub test()
Dim kiemtra As Boolean
Dim ValidRange As String, UserRange As String
ValidRange = "A1:C1" 
UserRange = "A5:A7"

If CheckColumns(UserRange, ValidRange) = True Then
    kiemtra = True
Else
    kiemtra = False
End If
End Sub
 
Upvote 0
Em chỉ kiểm tra cột thôi ạ. A1:B10 (cột A và B) <> A100:A119 (chỉ cột A)

Em sửa lại hàm như sau:
Mã:
Function CheckColumns(rng1, rng2) As Boolean
    CheckColumns = False
    Dim Value1, Value2 As Range
    Set Value1 = Range(rng1).Columns
    Set Value2 = Range(rng2).Columns

    If Value1.Count = Value2.Count Then
        If Value1.Column = Value2.Column Then
            CheckColumns = True
        End If
    End If
End Function
Sub kiểm tra:
Mã:
Sub test()
Dim kiemtra As Boolean
Dim ValidRange As String, UserRange As String
ValidRange = "A1:C1"
UserRange = "A5:A7"

If CheckColumns(UserRange, ValidRange) = True Then
    kiemtra = True
Else
    kiemtra = False
End If
End Sub
Tôi đã nói rồi. Để tôi có thể phán là code đúng hay sai thì phải phát biểu bằng lời, thế nào thì CheckColumns trả về TRUE.

Ở bài trước không phải vô cớ mà tôi cho vd. A1:B10 và A100:A119. Vì theo tôi nếu đã viết "Returns True if rng1 = rng2" thì theo lôgíc của tôi CheckColumns phải trả về True KHI vả CHỈ KHI rng1 và rng2 có địa chỉ y hệt nhau - cùng là vùng trên 1 sheet, bắt đầu cùng 1 ô và có số dòng và số cột bằng nhau. Trong khi đó code CheckColumns lại trả về True khi rng1 và rng2 có SỐ Ô bằng nhau - If rng1.Count = rng2.Count Then (2 vùng tôi đưa ra cùng có 20 ô) và cùng có cột đầu tiên như nhau - If rng1.Column = rng2.Column Then (2 vùng tôi đưa ra cùng xuất phát từ cột A). Tôi hiểu được code nên tôi bịa ra được ví dụ mà code sẽ trả về TRUE, trong khi lôgíc thì trả về FALSE.

Bạn vẫn tiếp tục không phát biểu bằng lời nên tôi không muốn hỏi cho ví dụ cụ thể nữa, mất công lắm. Chỉ nói ngắn gọn: Nếu với 2 vùng "A1:A10" và "A100:A500" code phải trả về TRUE, với "B2:K10" và "C2:K10" phải trả về False, với "B2:K10" và "B2:J10" phải trả về False, thì code đúng.

Tôi không hiểu bạn bịa ra CheckColumns để làm gì nhưng do trước đó có InRange nên tôi nói trước là CheckColumns và InRange trả về kết quả khác nhau đấy nhé.
 
Upvote 0
Tôi đã nói rồi. Để tôi có thể phán là code đúng hay sai thì phải phát biểu bằng lời, thế nào thì CheckColumns trả về TRUE.

Ở bài trước không phải vô cớ mà tôi cho vd. A1:B10 và A100:A119. Vì theo tôi nếu đã viết "Returns True if rng1 = rng2" thì theo lôgíc của tôi CheckColumns phải trả về True KHI vả CHỈ KHI rng1 và rng2 có địa chỉ y hệt nhau - cùng là vùng trên 1 sheet, bắt đầu cùng 1 ô và có số dòng và số cột bằng nhau. Trong khi đó code CheckColumns lại trả về True khi rng1 và rng2 có SỐ Ô bằng nhau - If rng1.Count = rng2.Count Then (2 vùng tôi đưa ra cùng có 20 ô) và cùng có cột đầu tiên như nhau - If rng1.Column = rng2.Column Then (2 vùng tôi đưa ra cùng xuất phát từ cột A). Tôi hiểu được code nên tôi bịa ra được ví dụ mà code sẽ trả về TRUE, trong khi lôgíc thì trả về FALSE.

Bạn vẫn tiếp tục không phát biểu bằng lời nên tôi không muốn hỏi cho ví dụ cụ thể nữa, mất công lắm. Chỉ nói ngắn gọn: Nếu với 2 vùng "A1:A10" và "A100:A500" code phải trả về TRUE, với "B2:K10" và "C2:K10" phải trả về False, với "B2:K10" và "B2:J10" phải trả về False, thì code đúng.

Tôi không hiểu bạn bịa ra CheckColumns để làm gì nhưng do trước đó có InRange nên tôi nói trước là CheckColumns và InRange trả về kết quả khác nhau đấy nhé.
à vâng xin lỗi bác ạ.
Đoạn Returns True if rng1 = rng2 em không có sử dụng nó, em có để nó trong nháy đơn vì em copy của cái InRange. Nên khi em kiểm tra thì như ví dụ của bác A1:B10 sẽ khác A100:A119 (trả về kết quả là FALSE).
Và ở dưới sẽ đúng như bác nói. A1:A10 và A100:A500 sẽ trả về TRUE, B2:K10 và C2:K10 trả về FALSE, B2:K10 và B2:J10 trả về FALSE.
Sai sót của em là không xóa đoạn Returns True if rng1 = rng2.
Em kiểm tra như sau: đoạn If value1.count = value2.count Then để kiểm tra số cột (em bị nhầm lẫn đoạn này) nhưng mà như bác nói thì nó sẽ kiểm tra số ô bằng nhau (cái này em chưa hiểu cách kiểm tra số cột có bằng nhau không cho lắm) và có cùng cột đầu tiên như nhau If value1.column = value2.column Then

Nhưng kết quả vẫn cho ra đúng.
Bác xem code tại bài #8 ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
à vâng xin lỗi bác ạ.
Đoạn Returns True if rng1 = rng2 em không có sử dụng nó, em có để nó trong nháy đơn vì em copy của cái InRange. Nên khi em kiểm tra thì như ví dụ của bác A1:B10 sẽ khác A100:A119 (trả về kết quả là FALSE).
Và ở dưới sẽ đúng như bác nói. A1:A10 và A100:A500 sẽ trả về TRUE, B2:K10 và C2:K10 trả về FALSE, B2:K10 và B2:J10 trả về FALSE.
Sai sót của em là không xóa đoạn Returns True if rng1 = rng2.
Em kiểm tra như sau: đoạn If value1.count = value2.count Then để kiểm tra số cột (em bị nhầm lẫn đoạn này) nhưng mà như bác nói thì nó sẽ kiểm tra số ô bằng nhau (cái này em chưa hiểu cách kiểm tra số cột có bằng nhau không cho lắm) và có cùng cột đầu tiên như nhau If value1.column = value2.column Then

Nhưng kết quả vẫn cho ra đúng.
Bác xem code tại bài #8 ạ.
Bạn vẫn cố tình không phát biểu bằng lời. Tôi cần cái phát biểu, không cần giải thích dài dòng. Vì có lấy 1000 ví dụ thì cũng chưa thể chắc chắn, chỉ là đoán mò. Phát biểu thôi.

Tôi tự cho là hiểu ý, và do vậy tôi tự phát biểu như sau: "Hàm CheckColumns trả về True khi và chỉ khi rng1 và rng2 là 2 vùng chữ nhật trên cùng 1 sheet, có cùng số cột, và cột đầu tiên của 2 vùng là như nhau".

Lưu ý:
- với phát biểu của tôi thì 2 vùng không cần phải có cùng số dòng, không cần xuất phát từ cùng dòng. Tức với 2 vùng "A1:B1" và "A100:B500" cùng trên sheet1 thì CheckColumns phải trả về True.

- với phát biểu của tôi thì với 2 vùng "Sheet1!A1:B1" và "Sheet2!A100:B500" thì CheckColumns phải trả về False.

Tôi không quan tâm, liệu phát biểu của bạn có y như trên không, vì bạn cố tình không phát biểu.

Với phát biểu như trên thì tôi cho là code của CheckColumns phải như sau.
Mã:
Function CheckColumns(rng1, rng2) As Boolean
Dim Value1, Value2 As Range
    CheckColumns = False
    Set Value1 = Range(rng1)
    Set Value2 = Range(rng2)
    If Value1.Parent Is Value2.Parent Then
        CheckColumns = (Value1.Columns.Count = Value2.Columns.Count) And (Value1.Column = Value2.Column)
    End If
End Function
----------
Hãy lưu ý rằng với
ValidRange = "Sheet1!A1:B1"
UserRange = "Sheet2!A100:B200"

thì code bài #8 trả về True. Lôgíc của tôi không chấp nhận True vì 2 vùng nằm trên 2 sheet khác nhau. Không thể cãi là bạn sẽ luôn có 2 vùng trên 1 sheet. Đã là hàm tổng quát CheckColumns thì không thể giả thiết thế được. Còn nếu cố tình cho là thế thì phải có chú thích đàng hoàng.
 
Upvote 0
(1) TextBox thì gọi hẵn là TextBox, lại gán tên là RefEdit
Rồi lại viết rằng có 3 RefEdit; Đọc đến đây mình tưởng có 1 loại Control mới nên đi tìm thử
Hóa ra lại là TextBox
Bạn có vẻ thích lập lờ đánh lận con đen nhỉ ?!?

(2) Hình như đường hướng của bạn đang vương vướng
Giá như bạn mô tả lại công việc lại để mọi người có cái nhìn tổng thể thì sẽ biết đâu có hướng đi nhanh hơn bây giờ (đó là bạn đề ra 1 hướng mà bạn cho là tối ưu & đề nghị mọi người chạy theo; nhưng chưa chắc phải là hướng đi thật đúng)
Lấy ví dụ: Để xét 1 vùng này có nằm trong 1 vùng kia hay không ta có thể xài phương thức Intersect(),. . . .
 
Lần chỉnh sửa cuối:
Upvote 0
(1) TextBox thì gọi hẵn là TextBox, lại gán tên là RefEdit
Rồi lại viết rằng có 3 RefEdit; Đọc đến đây mình tưởng có 1 loại Control mới nên đi tìm thử
Hóa ra lại là TextBox
Bạn có vẻ thích lập lờ đánh lận con đen nhỉ ?!?
Trên Form của người ta có 3 RefEdit chứ có phải TextBox đâu.
 
Upvote 0
Bạn vẫn cố tình không phát biểu bằng lời. Tôi cần cái phát biểu, không cần giải thích dài dòng. Vì có lấy 1000 ví dụ thì cũng chưa thể chắc chắn, chỉ là đoán mò. Phát biểu thôi.

Tôi tự cho là hiểu ý, và do vậy tôi tự phát biểu như sau: "Hàm CheckColumns trả về True khi và chỉ khi rng1 và rng2 là 2 vùng chữ nhật trên cùng 1 sheet, có cùng số cột, và cột đầu tiên của 2 vùng là như nhau".

Lưu ý:
- với phát biểu của tôi thì 2 vùng không cần phải có cùng số dòng, không cần xuất phát từ cùng dòng. Tức với 2 vùng "A1:B1" và "A100:B500" cùng trên sheet1 thì CheckColumns phải trả về True.

- với phát biểu của tôi thì với 2 vùng "Sheet1!A1:B1" và "Sheet2!A100:B500" thì CheckColumns phải trả về False.

Tôi không quan tâm, liệu phát biểu của bạn có y như trên không, vì bạn cố tình không phát biểu.

Với phát biểu như trên thì tôi cho là code của CheckColumns phải như sau.
Mã:
Function CheckColumns(rng1, rng2) As Boolean
Dim Value1, Value2 As Range
    CheckColumns = False
    Set Value1 = Range(rng1)
    Set Value2 = Range(rng2)
    If Value1.Parent Is Value2.Parent Then
        CheckColumns = (Value1.Columns.Count = Value2.Columns.Count) And (Value1.Column = Value2.Column)
    End If
End Function
----------
Hãy lưu ý rằng với
ValidRange = "Sheet1!A1:B1"
UserRange = "Sheet2!A100:B200"

thì code bài #8 trả về True. Lôgíc của tôi không chấp nhận True vì 2 vùng nằm trên 2 sheet khác nhau. Không thể cãi là bạn sẽ luôn có 2 vùng trên 1 sheet. Đã là hàm tổng quát CheckColumns thì không thể giả thiết thế được. Còn nếu cố tình cho là thế thì phải có chú thích đàng hoàng.
Em cảm ơn ạ. Tại em cũng không biết phát biểu như thế nào. Phát biểu của anh đúng ý em rồi ạ.
(1) TextBox thì gọi hẵn là TextBox, lại gán tên là RefEdit
Rồi lại viết rằng có 3 RefEdit; Đọc đến đây mình tưởng có 1 loại Control mới nên đi tìm thử
Hóa ra lại là TextBox
Bạn có vẻ thích lập lờ đánh lận con đen nhỉ ?!?

(2) Hình như đường hướng của bạn đang vương vướng
Giá như bạn mô tả lại công việc lại để mọi người có cái nhìn tổng thể thì sẽ biết đâu có hướng đi nhanh hơn bây giờ (đó là bạn đề ra 1 hướng mà bạn cho là tối ưu & đề nghị mọi người chạy theo; nhưng chưa chắc phải là hướng đi thật đúng)
Lấy ví dụ: Để xét 1 vùng này có nằm trong 1 vùng kia hay không ta có thể xài phương thức Intersect(),. . . .
(2) Dạ vâng. Em có code theo cách nghĩ của em như bài ở đầu. Ở đây em muốn tối ưu code để hợp lý hơn.

Em xin mô tả lại ạ.
1610360153612.png
 
Upvote 0
Web KT

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

Back
Top Bottom