Xem giúp mình code của form lấy số hợp đồng với (-_-!) (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ntquocsy

Thành viên mới
Tham gia
26/8/08
Bài viết
12
Được thích
0
Mình mới bắt đầu tập sử dụng VBA nên nhờ các bạn xem giúp.
Form của mình lập ra là để lấy số hợp đồng, do có chiều loại hợp đồng nên mình sử dụng check box ( ô nào được tick thì sẽ tăng thêm 1). Các cột đều hoạt động tốt, chỉ có cột HDTD là bị lỗi ( Cứ mõi lần không tick vào nó thì lần sau nó lại đếm từ 0 ).
Rất mong các bạn giúp đỡ. Xin chân thành cảm ơn và hậu tạ+-+-+-+**~**
 

File đính kèm

Bạn nào giúp mình với, mình mới tập viết, tự học nên có nhiều chỗ không biết. Nếu mấy bạn có gì không hiểu thì mình có thể diễn đạt kỹ hơn.
 
Upvote 0
Mình mới bắt đầu tập sử dụng VBA nên nhờ các bạn xem giúp.
Form của mình lập ra là để lấy số hợp đồng, do có chiều loại hợp đồng nên mình sử dụng check box ( ô nào được tick thì sẽ tăng thêm 1). Các cột đều hoạt động tốt, chỉ có cột HDTD là bị lỗi ( Cứ mõi lần không tick vào nó thì lần sau nó lại đếm từ 0 ).
Rất mong các bạn giúp đỡ.

Nếu tôi không lầm thì không chỉ HDTD mà cả HĐTC nữa.
--------------------
Bạn có khai báo:
Mã:
Dim so_gnn, so_bctd, so_bbdg, so_hdtc As Range
Dim so_hdtd As Range

Như vậy chỉ có so_hdtc và so_hdtd là Range còn so_gnn, so_bctd, so_bbdg là Variant

Khi bạn có so_hdtc = "", so_hdtd = "",so_gnn = "",so_bctd = "",so_bbdg = "" (trong nhánh ELSE của các block IF) thì các ô C2, D2 (tương ứng với so_hdtc và so_hdtd) sẽ bị xóa nên ở lần sau "chơi tiếp" thì
Mã:
so_hdtc = Worksheets("Nhap").Range("c2") --> 0
so_hdtd = Worksheets("Nhap").Range("d2") --> 0

Còn so_gnn = "",so_bctd = "",so_bbdg = "" không ảnh hưởng gì tới bảng tính (A2, B2, E2)
--------
Tôi thấy trong các ô A2, B2, E2 có công thức. Vậy nếu bạn cần sheet Nhap thì lập công thức tương tự cho C2, D2 và sửa khai báo bỏ As Range cho so_hdtc và so_hdtd.

phiên bản 1:
Mã:
Private Sub cmd_nhap_Click()
    Dim so_gnn, so_bctd, so_bbdg, so_hdtc, so_hdtd
    Dim iRow As Long
    
    If Not (ChkBox_bctd Or ChkBox_bbdg Or ChkBox_hdtc Or ChkBox_hdtd Or ChkBox_gnn) Then
        MsgBox "Hay chon it nhat mot hop dong"
        Exit Sub
    End If

'    cac o a2, b2, c2, d2, e2 deu co cong thuc
    If ChkBox_bctd = True Then so_bctd = Worksheets("Nhap").Range("a2") + 1
    If ChkBox_bbdg = True Then so_bbdg = Worksheets("Nhap").Range("b2") + 1
    If ChkBox_hdtc = True Then so_hdtc = Worksheets("Nhap").Range("c2") + 1
    If ChkBox_hdtd = True Then so_hdtd = Worksheets("Nhap").Range("d2") + 1
    If ChkBox_gnn = True Then so_gnn = Worksheets("Nhap").Range("e2") + 1
    
    MsgBox "So bao cao tham dinh tai san la:   " & so_bctd & Chr(13) & "So bien ban dinh gia la:   " & so_bbdg & _
    Chr(13) & "So hop dong the chap la:   " & so_hdtc & Chr(13) & "So hop dong tin dung la:   " & so_hdtd & Chr(13) & _
    "So giay nhan no la:   " & so_gnn
    
    iRow = Worksheets("GNN").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    Worksheets("GNN").Cells(iRow, 1).Value = Date
    Worksheets("GNN").Cells(iRow, 2).Value = Me.cbox_ten_cbkh.Value
    Worksheets("GNN").Cells(iRow, 3).Value = Me.Txtbox_tenkh.Value
    Worksheets("GNN").Cells(iRow, 4).Value = so_bctd
    Worksheets("GNN").Cells(iRow, 5).Value = so_bbdg
    Worksheets("GNN").Cells(iRow, 6).Value = so_hdtc
    Worksheets("GNN").Cells(iRow, 7).Value = so_hdtd
    Worksheets("GNN").Cells(iRow, 8).Value = so_gnn
End Sub

Nhưng nếu có nhiều hợp đồng - checkbox thì code dài lê thê.
Cũng có thể rút ngắn bằng cách duyệt tập Controls của Form và thao tác với các CheckBox.
Ta chuẩn bị như sau:
1. Nhớ các chỉ số cột của A2, B2, C2, D2, E2 (trong sheet Nhap) vào TabIndex của CheckBox tương ứng. Cách làm: thiết lập TabIndex cho ComboBox là 0. Thiết lập cho các CheckBox: ChkBox_bctd, ChkBox_bbdg, ChkBox_hdtc, ChkBox_hdtd, ChkBox_gnn TabIndex lần lượt là 1, 2, 3, 4, 5 (chỉ số cột của A2, B2, C2, D2, E2)

2. Thiết lập cho các CheckBox ở trên giá trị Tag lần lượt là: "So bao cao tham dinh tai san la", "So bien ban dinh gia la", "So hop dong the chap la", "So hop dong tin dung la", "So giay nhan no la". Nếu không cần MsgBox trong cmd_nhap_Click thì bỏ khâu này.

3. code
Mã:
Private Sub cmd_nhap_Click()
    Dim obj As Control, msg As String, count As Long, iRow As Long
    
    If Not (ChkBox_bctd Or ChkBox_bbdg Or ChkBox_hdtc Or ChkBox_hdtd Or ChkBox_gnn) Then
        MsgBox "Hay chon it nhat mot hop dong"
        Exit Sub
    End If
    
    iRow = Worksheets("GNN").Cells(Rows.count, 1).End(xlUp).Offset(1, 0).Row
    Worksheets("GNN").Cells(iRow, 1).Value = Date
    Worksheets("GNN").Cells(iRow, 2).Value = Me.cbox_ten_cbkh.Value
    Worksheets("GNN").Cells(iRow, 3).Value = Me.Txtbox_tenkh.Value
    
'    cac o a2, b2, c2, d2, e2 deu co cong thuc
    For Each obj In Me.Controls
        If TypeOf obj Is MSForms.CheckBox Then
            If obj.Value Then
                count = Worksheets("Nhap").Cells(2, obj.TabIndex) + 1
    '            neu khong can MsgBox thi bo dong msg
                msg = msg & obj.Tag & ": " & count & Chr(13)
                Worksheets("GNN").Cells(iRow, obj.TabIndex + 3).Value = count
            End If
        End If
    Next obj
    
    MsgBox msg
End Sub

Nói chung code có thể viết theo nhiều kiểu, ở trên chỉ là ví dụ mà thôi.

Xin chân thành cảm ơn và hậu tạ+-+-+-+**~**

Bạn định hậu tạ gì đấy?
Tôi giúp miễn phí thôi. Một lời cám ơn chân thành là được. Người ta giúp, cái quí là ở tấm lòng. Chắc gì khi bạn muốn trả tiền thì người ta sẽ lao vào?
 
Upvote 0
Trước hết, mình xin cảm ơn bạn siwton rất nhiều, mình sẽ đọc thật kỹ bài của bạn để điều chỉnh. Mình nói hậu tạ là đùa thôi mà, nhưng mà nếu có thể hậu tạ bạn thiệt luôn. :D. Cảm ơn rất nhiều nhé.
 
Upvote 0

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

Back
Top Bottom