Cập nhật dữ liệu trên ListBox

Liên hệ QC

namhandsome1

Thành viên mới
Tham gia
11/9/16
Bài viết
38
Được thích
3
Các cao nhân cho mình hỏi, có cách nào để dữ liệu luôn dc làm mới trên listbox khi ta nhập dữ liệu vào bảng, và trên list box hiện thị dòng cuối của bảng dữ liệu thay vì hiện dòng đầu tiên của bảng. Thanks các bác
 
cứ gọi là cao nhân nếu bạn thích. chả hiêu sao lại dị ứng vô lý về cái từ đó. trong nội quy
chả thấy cấm.
Người muốn có chiều cao hơn kẻ khác fải & thường là chân dài!
 
Upvote 0
Cao nhân gì. Dễ như ăn kẹo (thịt) mút :D
vậy bác rảnh làm em cái nút sửa và xóa dữ liệu ở form_IEport với! (sửa và xóa ở bảng CSDL bác nhé. THnask bác
Bài đã được tự động gộp:

Đúng là không cấm, nhưng nên khuyên người hỏi tránh từ đó - vì đốt đuốc tìm cao nhân đúng nghĩa hơi khó ở đây

@Chủ Topic:
Nên nói rõ muốn listbox nào tên gì, form nào, xảy ra lỗi không muốn khi nào, mật khẩu login sao...
Cụ thể ở module, code, form nào, dòng nào đoạn nào?

Còn đưa 1 đống như bạn thì ai mò ra đây?
ở comment sau em nói rõ rồi còn gì, form: frm_IEport, sheets CSDL
 
Upvote 0
Tôi không làm thêm nữa đâu. Làm chơi cho vui khác mà bị cho bài tập lại khác.

Nhìn code làm đại thôi. Không kiểm tra.

1. Thêm
Mã:
Private Sub cmd_XoaCSDL_Click()
    With ListBox_CSDL
        If .ListIndex > -1 Then
            Sheet1.Range("B" & .ListIndex + 3).Resize(, 8).Delete xlUp
            .RemoveItem .ListIndex
        End If
    End With
End Sub

Private Sub load_listbox()
Dim lastRow As Long
    lastRow = Sheet1.Range("B" & Rows.Count).End(xlUp).Row
    If lastRow > 2 Then ListBox_CSDL.List = Sheet1.Range("B2:I" & lastRow).Value
End Sub

2. Sửa
Mã:
Private Sub cmd_SuaCSDL_Click()
Dim curr_row As Long
    If ListBox_CSDL.ListIndex = -1 Then Exit Sub
    If Not ((txt_ID.Text <> "") And (txt_Name.Text <> "") And IsDate(txt_Date.Text) And (txt_Content.Text <> "") And (txt_HD.Text <> "") And IsNumeric(txt_Quantity.Value)) Then
        MsgBox "Check Data Again! Please"
        Exit Sub
    End If
   
    curr_row = ListBox_CSDL.ListIndex + 3
    With Sheet1
        .Range("B" & curr_row) = txt_ID.Text
        .Range("C" & curr_row) = txt_Name.Text
        .Range("D" & curr_row) = CDate(txt_Date.Text)
        .Range("E" & curr_row) = txt_Content.Text
        .Range("F" & curr_row) = txt_HD.Text
        If Option_Import.Value Then
            .Range("G" & curr_row) = txt_Quantity.Text
        Else
            .Range("H" & curr_row) = txt_Quantity.Text
        End If
        With ListBox_CSDL
            .List(.ListIndex, 0) = txt_ID.Value
            .List(.ListIndex, 1) = txt_Name.Value
            .List(.ListIndex, 2) = txt_Date.Value
            .List(.ListIndex, 3) = txt_Content.Value
            .List(.ListIndex, 4) = txt_HD.Value
            .List(.ListIndex, 5) = .Range("G" & curr_row)
            .List(.ListIndex, 6) = .Range("H" & curr_row)
        End With
        ThisWorkbook.Save
        MsgBox "Import Data Succesfull!"
        If Not (Chechbox_Ngayhientai.Value Or CheckBox_ChuyenDS1.Value Or CheckBox_XuatLV.Value Or CheckBox_ChuyenNTL.Value) Then
            txt_Date.Text = ""
            txt_Content.Text = ""
        End If
        txt_ID.Text = ""
        txt_Name.Text = ""
        txt_HD.Text = ""
        txt_Quantity.Text = ""
        txt_ID.SetFocus
    End With
End Sub

Private Sub ListBox_CSDL_Click()
   With ListBox_CSDL
        txt_ID.Value = .List(.ListIndex, 0)
        txt_Name.Value = .List(.ListIndex, 1)
        txt_Date.Value = .List(.ListIndex, 2)
        txt_Content.Value = .List(.ListIndex, 3)
        txt_HD.Value = .List(.ListIndex, 4)
   End With
End Sub

Private Sub UserForm_Initialize()
Dim endR As Long
    cmd_SuaCSDL.Enabled = False
    cmd_XoaCSDL.Enabled = False
    With ListBox_CSDL
        .ColumnCount = 8
        .ColumnWidths = "80,250,70,150,50,50,50,50"
'        .BoundColumn = 1
'        .TextColumn = 2
    End With
    load_listbox
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cao nhân gì. Dễ như ăn kẹo (thịt) mút :D
Khó vãi nước ra mà anh bảo là dễ, đúng là cao nhân có khác.
Người muốn có chiều cao hơn kẻ khác fải & thường là chân dài!
Đó cũng là một dạng, "cao nhân" là người cao người lớn, ai cứ qua tuổi dậy thì đều chả cao. Đây nè anh batman1 đấy, chả nhẽ anh ý lại chưa qua tuổi dậy thì sao!!!

Đang không hiểu là với cái cơ sở dữ liệu lớn thế, mà đột xuất bảo là phải sửa một dòng nào đó thì tìm mỏi mắt luôn?
 
Upvote 0
Khó vãi nước ra mà anh bảo là dễ, đúng là cao nhân có khác.
Đó cũng là một dạng, "cao nhân" là người cao người lớn, ai cứ qua tuổi dậy thì đều chả cao. Đây nè anh batman1 đấy, chả nhẽ anh ý lại chưa qua tuổi dậy thì sao!!!
Có người dậy thì sớm, có người muộn mà.
Đến khi tóc bạc rồi mới "hi hi" :D
Đang không hiểu là với cái cơ sở dữ liệu lớn thế, mà đột xuất bảo là phải sửa một dòng nào đó thì tìm mỏi mắt luôn?
Nhiều người không có thói quen nói rõ ràng. Cứ bắt người khác phải phân tích code của mình để hiểu ý. Mà trong trường hợp này vẫn chưa có code Xóa, dù là code sai, để mà phân tích.

Chính ra phải nói:
1. Sửa.
Khi ta chọn 1 dòng trong ListBox thì dữ liệu của dòng đó được nhập vào các TextBox. Sau khi sửa trong TextBox và nhấn nút Sửa thì giá trị các TextBox được thay thế cho các giá trị cũ trên sheet cho dòng tương ứng, đồng thời thay thế cho các giá trị cũ trong ListBox trong dòng được chọn.

2. Khi chọn dòng trong ListBox và nhấn nút Xóa thì dòng đó được xóa trong ListBox, đồng thời dòng tương ứng trên sheet sẽ được xóa và các dữ liệu ở các dòng dưới được "đẩy lên".

Về Xóa do người hỏi không nói rõ nên tôi đoán mò như thế, dựa trên lôgíc của tôi, nhưng không dám nói là đoán đúng.
 
Upvote 0
Nhưng mà anh dậy thì thành công rồi chứ gì?

Còn nếu xóa dữ liệu thì cứ xóa dòng dữ liệu trong sheet, rồi update lại listbox cũng được anh nhỉ.
Cũng gian nan lắm nhưng thành công rồi.

Xóa trên sheet thì đúng rồi. Còn chuyện làm mới ListBox thì tôi đã nó ở trước rồi. Ngoài RemoveItem thì có thể gọi load_listbox (trong code Sửa cũng tương tự). Chính để cho mục đích ấy mà tôi chuyển 1 đoạn code từ Initialize sang load_listbox.
Ngoài ra còn phải "đẩy" các dòng dưới lên lấp vào dòng trống.

Cái cần nói là phải xóa dòng nào thì chủ thớt không nói. Tôi đoán là xóa dòng được chọn trong ListBox.
 
Upvote 0
Web KT
Back
Top Bottom