Đếm dòng trong listbox? (1 người xem)

Liên hệ QC

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

haikimcuong

Thành viên hoạt động
Tham gia
6/7/10
Bài viết
169
Được thích
36
Xin các thầy chỉ giúp em code đếm số dòng có trong 1 listbox và số dòng hiện trên 1 textbox hoặc label ạ? Tức là cứ trong listbox tăng 1 dong thì sẽ tự up số dòng lên lb hoặc tb. Cảm ơn các thầy?
 
Đếm số dòng trong listbox thì dùng cái này (Giả sử là Listbox1): Listbox1.ListCount
Còn việc tăng số dòng trong listbox sẽ tự động tăng số hiển thị trong textbox thì bạn có thể dùng 1 trong 2 cách:
1. Ở đoạn code mà bạn AddItem, sau khi AddItem, bạn dùng lệnh sau (Giả sử là textbox1): Textbox1.Value=Val(Textbox1.Value)+1
2. Dùng thủ tục Listbox_Change(), khi đó dùng lệnh sau: Textbox1.Value=Listbox1.ListCount
Dùng thủ tục Listbox_Change() sẽ hay hơn vì áp dụng được cả trong trường hợp RemoveItem
 
Lần chỉnh sửa cuối:
Upvote 0
Đếm số dòng trong listbox thì dùng cái này (Giả sử là Listbox1): Listbox1.ListCount
Còn việc tăng số dòng trong listbox sẽ tự động tăng số hiển thị trong textbox thì bạn có thể dùng 1 trong 2 cách:
1. Ở đoạn code mà bạn AddItem, sau khi AddItem, bạn dùng lệnh sau (Giả sử là textbox1): Textbox1.Value=Val(Textbox1.Value)+1
2. Dùng thủ tục Listbox_Change(), khi đó dùng lệnh sau: Textbox1.Value=Listbox1.ListCount
Dùng thủ tục Listbox_Change() sẽ hay hơn vì áp dụng được cả trong trường hợp RemoveItem
Tình hình thủ tục change() k có tác dụng vẫn phải kick vào lb nó mới update
có phải dùng thêm lệnh screenupdate k Linh?
 
Upvote 0
dạ k em dùng lệnh trên form luôn ạ chứ k phải trên sheet. Cái này thì em biết
 
Upvote 0
dạ k em dùng lệnh trên form luôn ạ chứ k phải trên sheet. Cái này thì em biết

Nếu bạn dùng trong form thì cái ScreenUpdating sẽ không có tác dụng gì đâu nhé!

Nếu Add vào list thì thủ tục nào để add cho nó phải có dòng cập nhật trên Label1 luôn, chứ bản thân ListBox không phát sinh sự kiện Change khi Add đâu nhé!

Trường hợp này tôi dùng nút lệnh để Add List thì tôi đặt thủ tục ở trong đó luôn!

Mã:
Private Sub CommandButton1_Click()
    ListBox1.AddItem "Hoang Trong Nghia"
    Label1.Caption = ListBox1.ListCount
End Sub
 
Upvote 0
Thanks anh em đã làm đc nhưng k cần thêm button nữa vì kick trưc tiếp vào listbox nó cũng update anh ạ, Xin hỏi anh trường hợp muốn ẩn, hiện 1 label có chữ theo điều kiện textbox đó: nếu tb >=0 thì hiện label có chữ ABC, Nếu tb<=0 thì label hide?
 
Upvote 0
Thanks anh em đã làm đc nhưng k cần thêm button nữa vì kick trưc tiếp vào listbox nó cũng update anh ạ, Xin hỏi anh trường hợp muốn ẩn, hiện 1 label có chữ theo điều kiện textbox đó: nếu tb >=0 thì hiện label có chữ ABC, Nếu tb<=0 thì label hide?

1) Mỗi lần click vào ListBox thì mới cập nhật thì mất nhiều thao tác quá, vã lại, người khác xài thì chả biết điều này (chỉ là ý kiến cá nhân).

2) Mâu thuẫn chỗ tb >=0 và tb<=0, nếu nó bằng 0 thì chã biết nó thuộc phe nào nữa!

3) nếu tb > 0 thì hiện label thì dùng sự kiện Change của TextBox:

Mã:
Private Sub TextBox1_Change()
    Label1.Visible = (Val(TextBox1) > 0)
End Sub

4) Nếu luôn luôn là chữ ABC trên Label thì khi thiết kế Form ta gõ trước vô Label luôn, còn mỗi thay đổi (dựa vào sự thay đổi của TextBox) thì thủ tục sẽ như sau:

Mã:
Private Sub TextBox1_Change()
    Label1.Caption = "ABC"
    Label1.Visible = (Val(TextBox1) > 0)
End Sub
 
Upvote 0
1) Mỗi lần click vào ListBox thì mới cập nhật thì mất nhiều thao tác quá, vã lại, người khác xài thì chả biết điều này (chỉ là ý kiến cá nhân).

2) Mâu thuẫn chỗ tb >=0 và tb<=0, nếu nó bằng 0 thì chã biết nó thuộc phe nào nữa!

3) nếu tb > 0 thì hiện label thì dùng sự kiện Change của TextBox:

Mã:
Private Sub TextBox1_Change()
    Label1.Visible = (Val(TextBox1) > 0)
End Sub

4) Nếu luôn luôn là chữ ABC trên Label thì khi thiết kế Form ta gõ trước vô Label luôn, còn mỗi thay đổi (dựa vào sự thay đổi của TextBox) thì thủ tục sẽ như sau:

Mã:
Private Sub TextBox1_Change()
    Label1.Caption = "ABC"
    Label1.Visible = (Val(TextBox1) > 0)
End Sub
em lam đc rồi anh ơi? mỗi cái chỗ listbox_change thì chẳng biết phải làm thế nào để nó tự update khi có sự thay đổi
 
Upvote 0
em lam đc rồi anh ơi? mỗi cái chỗ listbox_change thì chẳng biết phải làm thế nào để nó tự update khi có sự thay đổi

Tôi đã nói rồi còn gì!

Gán thằng em này:

Mã:
Label1.Caption = ListBox1.ListCount

Vào dòng cuối của thủ tục mà bạn thay đổi tăng hay giảm các Item của ListBox thì nó sẽ tự update mà thôi.
 
Upvote 0
Đây là file em đang tự học có 3 vấn đề xảy ra anh chị tìm hiểu giúp đỡ chỉ giúp em.
1. Khi nhập dữ liệu và enter đến button Gán thì nó sẽ gán liên tục mà không quay trở lại nhập tiếp dữ liệu?
2. Ẩn hiện label1 thì nó k tự update khi Lbox thay đổi dù đã có thủ tục change.
3. Chữ bị lỗi font ở label 1 dù đã đổi sang vernada(vietnamese) và dùng unicode vietnamese locale CP 1285?
Xin anh chị chỉ giúp
 

File đính kèm

Upvote 0
Đây là file em đang tự học có 3 vấn đề xảy ra anh chị tìm hiểu giúp đỡ chỉ giúp em.
1. Khi nhập dữ liệu và enter đến button Gán thì nó sẽ gán liên tục mà không quay trở lại nhập tiếp dữ liệu?
2. Ẩn hiện label1 thì nó k tự update khi Lbox thay đổi dù đã có thủ tục change.
3. Chữ bị lỗi font ở label 1 dù đã đổi sang vernada(vietnamese) và dùng unicode vietnamese locale CP 1285?
Xin anh chị chỉ giúp
Như anh Trọng Nghĩa đã nói, Listbox_Change() không có hiệu ứng gì, vì thế trong lệnh gán bạn thêm câu lệnh TextBox1.Value = Val(TextBox1.Value) + 1 sau khi đã gán xong cho listbox.
Còn cái vụ "gán liên tục" mà bạn nói, thì sau khi gán xong, bạn cần thêm các câu lệnh xóa textbox và setforcus cho textbox1
Muốn thể hiện font Unicode thì có 2 cách:
1. Dùng trực tiếp bộ mã Unicode và dùng hàm để chuyển, nhưng cách này tốn thời gian vì phải nhập mã cho từng ký tự
2. Dùng bộ mã TCVN3 nhập sau đó dùng hàm chuyển mã từ TCVN3 sang Unicode (Hàm này trên diễn đàn có đấy bạn).
 
Upvote 0
Như anh Trọng Nghĩa đã nói, Listbox_Change() không có hiệu ứng gì, vì thế trong lệnh gán bạn thêm câu lệnh TextBox1.Value = Val(TextBox1.Value) + 1 sau khi đã gán xong cho listbox.
Còn cái vụ "gán liên tục" mà bạn nói, thì sau khi gán xong, bạn cần thêm các câu lệnh xóa textbox và setforcus cho textbox1
Muốn thể hiện font Unicode thì có 2 cách:
1. Dùng trực tiếp bộ mã Unicode và dùng hàm để chuyển, nhưng cách này tốn thời gian vì phải nhập mã cho từng ký tự
2. Dùng bộ mã TCVN3 nhập sau đó dùng hàm chuyển mã từ TCVN3 sang Unicode (Hàm này trên diễn đàn có đấy bạn).
Mình đã thực hiện được chỗ chuyển mã tcvn3 và gán vào listbox tuy nhiên cái phần không tự update listbox khi mới xuất hiện 1 dòng đến n dòng thì k làm đc:
Khi gán vào tb_change thì nó tạo 1 phép cộng cho dòng thứ 2 lên 225
Khi gán vào lb_change thì nó tạo phép tính n+1 tức là dòng 1 thì nó sẽ báo bằng 2 vậy mong bạn xem giúp mình.
 
Upvote 0
Mình đã thực hiện được chỗ chuyển mã tcvn3 và gán vào listbox tuy nhiên cái phần không tự update listbox khi mới xuất hiện 1 dòng đến n dòng thì k làm đc:
Khi gán vào tb_change thì nó tạo 1 phép cộng cho dòng thứ 2 lên 225
Khi gán vào lb_change thì nó tạo phép tính n+1 tức là dòng 1 thì nó sẽ báo bằng 2 vậy mong bạn xem giúp mình.

Hình như bạn chưa hiểu những gì người ta nói thì phải?
Phân tích:
- ListBox thay đổi nhờ vào đâu? Có phải là nhờ vào việc bạn bấm cái CommandButton không?
- Vậy code của CommandButton ấy là gì? Có phải là cái này không:
Mã:
Private Sub CMGan_Click()
  On Error Resume Next
  Dim i As Long
  With Me
    If .TBTitte01 = "" Or .TBTitte02 = "" Then Exit Sub
     i = .LBox.ListCount
    .LBox.AddItem (Format(i + 1, "00")) ' Cot dau tien
    .LBox.List(i, 1) = .TBTitte01        ' Cot thu 2
    .LBox.List(i, 2) = .TBTitte02         ' Cot thu 3
  End With
End Sub
Vậy bạn chỉ làm có mỗi việc là thêm đoạn code mà Hoàng Trọng Nghĩa đã gợi ý vào cuối code trên là được rồi
Mã:
Private Sub CMGan_Click()
  On Error Resume Next
  Dim i As Long
  With Me
    If .TBTitte01 = "" Or .TBTitte02 = "" Then Exit Sub
     i = .LBox.ListCount
    .LBox.AddItem (Format(i + 1, "00")) ' Cot dau tien
    .LBox.List(i, 1) = .TBTitte01        ' Cot thu 2
    .LBox.List(i, 2) = .TBTitte02         ' Cot thu 3
  End With
  [COLOR=#ff0000][B]TextBox1.Value = LBox.ListCount[/B][/COLOR]
End Sub
Chính là cái dòng màu đỏ vừa thêm vào
 
Upvote 0
Đoạn code cho lệnh gán thế này nhé:
PHP:
Private Sub CMGan_Click()
    On Error Resume Next
    Dim i As Long
    With Me
        If .TBTitte01 = "" Or .TBTitte02 = "" Then Exit Sub
        i = .LBox.ListCount
        .LBox.AddItem (Format(i + 1, "00")) ' Cot dau tien
        .LBox.List(i, 1) = .TBTitte01        ' Cot thu 2
        .LBox.List(i, 2) = .TBTitte02         ' Cot thu 3
        TextBox1.Value = Val(TextBox1.Value) + 1
        TBTitte01.Value = ""
        TBTitte02.Value = ""
        TBTitte01.SetFocus
    End With
End Sub
Thậm chí chả cần cái Commandbutton gán làm gì, bạn chỉ cần thủ tục sau cho:
PHP:
Private Sub TBTitte02_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i As Long
If KeyCode = 13 Then
    With Me
        If .TBTitte01 = "" Or .TBTitte02 = "" Then Exit Sub
        i = .LBox.ListCount
        .LBox.AddItem (Format(i + 1, "00")) ' Cot dau tien
        .LBox.List(i, 1) = .TBTitte01        ' Cot thu 2
        .LBox.List(i, 2) = .TBTitte02         ' Cot thu 3
        TextBox1.Value = Val(TextBox1.Value) + 1
        TBTitte01.Value = ""
        TBTitte02.Value = ""
        TBTitte01.SetFocus
    End With
End If
End Sub
 
Upvote 0
Đây là file em đang tự học có 3 vấn đề xảy ra anh chị tìm hiểu giúp đỡ chỉ giúp em.
1. Khi nhập dữ liệu và enter đến button Gán thì nó sẽ gán liên tục mà không quay trở lại nhập tiếp dữ liệu?
2. Ẩn hiện label1 thì nó k tự update khi Lbox thay đổi dù đã có thủ tục change.
3. Chữ bị lỗi font ở label 1 dù đã đổi sang vernada(vietnamese) và dùng unicode vietnamese locale CP 1285?
Xin anh chị chỉ giúp

Theo tôi, bạn chỉ cần làm đơn giản như sau:

Toàn bộ code trong form chỉ cần như thế này:

PHP:
Private Sub UserForm_Initialize()
    TextBox1 = Sheet1.Range("A65536").End(xlUp).Row
End Sub

Private Sub CMGan_Click()
    If TBTitte01 = "" Then
        MsgBox "Chua nhap Ten!"
        TBTitte01.SetFocus
    ElseIf TBTitte02 = "" Then
        MsgBox "Chua nhap Tuoi!"
        TBTitte02.SetFocus
    Else
        Dim idx As Long
        With LBox
            idx = .ListCount
            .AddItem Val(TextBox1)
            .List(idx, 1) = TBTitte01
            .List(idx, 2) = TBTitte02
            .ListIndex = idx
        End With
        TextBox1 = Val(TextBox1) + 1
        CMSave.Enabled = True
        TBTitte01 = ""
        TBTitte02 = ""
        TBTitte01.SetFocus
    End If
End Sub

Private Sub CMExit_Click()
    Unload Me
End Sub

Private Sub CMSave_Click()
    Dim idx As Long
    idx = LBox.ListCount
    If idx > 0 Then
        Sheet1.Range("A65536").End(xlUp).Offset(1).Resize(idx, 3) = LBox.List
        LBox.Clear
        CMSave.Enabled = False
    End If
End Sub

Bạn xem file và thử thực hiện trên đó xem thế nào nhé! Tôi thực hiện code trên form khác!
 

File đính kèm

Upvote 0
Các thầy cho em hỏi thêm 1 chút về msgbox?
Có cách nào chuyển các nút lệnh yes, no, cancel.. sang tiếng việt hoặc sang 1 tên nào khác được không ạ.
Ví dụ: nút yes -> sửa(chấp nhận); no -> xóa; Cancel -> bỏ qua.
 
Upvote 0
Upvote 0
Cảm ơn các thầy hôm nay em tập tành thế đã k nhiều quá rồ người k hiểu, vợ bắt đi chợ rồi
 
Upvote 0
Web KT

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

Back
Top Bottom