Đơn vị tính không chạy theo tên phụ liệu.

Liên hệ QC

NguyenthiH

Thành viên mới đăng ký
Tham gia
11/12/16
Bài viết
965
Được thích
175
Giới tính
Nữ
Chào các anh chị!
Em có file này, chế lại code của Thầy @batman1, nhưng khi chạy code thì đơn vị tính không chạy theo tên phụ liệu, chỉ hiện "Pcs".
Trong file khi nhận nút "hiện Form" -> form Nhap hiện -> gõ chữ "m" vào cb_KH (khách hàng) -> enter-> hiện tên phụ liệu, lúc này bên textbox đơn vị tính chỉ hiện "Pcs", chứ không hiện gì khác mặc dù có chọn tên phụ liệu là "Dây Ren", đúng ra đơn vị tính phải là "Mts".
Mong Thầy và các anh chị xem chỉnh dùm code.
Mã:
Private Function KhachHang_TenPL()
Dim r As Long, k As Long, KH As String, dvt As String, TenPL As Object, arr()
    KH = LCase(cb_KH.Text)
    Set TenPL = CreateObject("Scripting.Dictionary")
    TenPL.comparemode = vbTextCompare
   
    With ThisWorkbook.Worksheets("Sheet1")
        arr = .Range("B4:D" & .Cells(Rows.count, "B").End(xlUp).Row + 1).Value
    End With
    For r = 1 To UBound(arr) - 1
        If LCase(arr(r, 3)) = KH Then
            If dvt = "" Then dvt = arr(r, 2)
            If Not TenPL.exists(arr(r, 1)) Then TenPL.Add arr(r, 1), ""
        End If
    Next r
   
    If TenPL.count Then
        dvt1.Text = dvt
        cb_thh1.List = TenPL.keys
        cb_thh1.SetFocus
        cb_thh1.DropDown
    End If
cb_thh1.Value = cb_thh1.List(0)
End Function
 

File đính kèm

Lần chỉnh sửa cuối:
Mong Thầy và các anh chị xem dùm code sai chổ nào mà đơn vị tính không chạy theo tên phụ liệu giúp em ạ.
 
Upvote 0
Code người ta viết cho yêu cầu cụ thể. Nếu có yêu cầu khác và muốn chế thì trước tiên phải hiểu được code của người ta. Sau đó muốn chế thì phải có kiến thức về VBA, chứ nếu đúng là mù VBA thì làm sao chế được?
1. Thay toàn bộ Private Function KhachHang_TenPL() ... End Function bằng
Mã:
Private Sub LoadTenPL()
Dim r As Long, KH As String, key, TenPL As Object, arr()
    KH = LCase(cb_KH.Text)
    Set TenPL = CreateObject("Scripting.Dictionary")
    TenPL.comparemode = vbTextCompare
  
    With ThisWorkbook.Worksheets("Sheet1")
        arr = .Range("B4:D" & .Cells(Rows.count, "B").End(xlUp).Row + 1).Value
    End With
    For r = 1 To UBound(arr) - 1
        If LCase(arr(r, 3)) = KH Then
            If Not TenPL.exists(arr(r, 1)) Then TenPL.Add arr(r, 1), arr(r, 2)
        End If
    Next r
  
    If TenPL.count Then
        ReDim arr(1 To TenPL.count, 1 To 2)
        r = 0
        For Each key In TenPL.keys
            r = r + 1
            arr(r, 1) = key
            arr(r, 2) = TenPL.Item(key)
        Next key
        With cb_thh1
            .List = arr
            .Value = cb_thh1.List(0)
            .SetFocus
            .DropDown
        End With
    End If
    Set TenPL = Nothing
End Sub
2. Sửa thành
Mã:
Private Sub cb_KH_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        LoadTenPL
        KeyCode = 0
    End If
End Sub
3. Thêm
Mã:
Private Sub cb_thh1_Change()
    With cb_thh1
        If .ListIndex > -1 Then dvt1.Value = .List(.ListIndex, 1)
    End With
End Sub

Nếu DVT trong cb_thh1 làm ngứa mắt thì thiết lập ColumnCount = 1.
--------
Bổ sung.
Mà muốn viết gì thì cũng cần tư duy.
Khi mỗi TPL có 1 DVT khác nhau thì phải ghi những ánh xạ đó vào một "bảng tra" để sau đó khi chọn TPL nào thì sẽ đọc từ "bảng tra" DVT đi kèm với nó. Không có bảng tra thì khi chọn TPL đọc ra DVT bằng niềm tin à? Bảng tra ở đây là đối tượng TenPL - TPL là key, DVT là item. Nhưng để tiện đọc ra DVT khi chọn TPL trong combo cb_thh1 thì người ta "nhồi" key và item vào mảng arr - key ở cột 1 và item ở cột 2. Do sau đó mảng arr được "nhét" vào combo cb_thh1 nên cứ mỗi lần chọn TPL trong combo cb_thh1 thì đọc ra DVT tương ứng với nó từ cột thứ 2 (chỉ số là 1) của combo cb_thh1.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom