Cập nhật dữ liệu trên ListBox (1 người xem)

Liên hệ QC

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

namhandsome1

Thành viên mới
Tham gia
11/9/16
Bài viết
38
Được thích
5
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á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. Cảm ơn các bác
Cách thì có, nhưng bạn sẽ không được giúp đỡ vì chẳng có ai dám tự nhận mình là Cao nhân đâu. Muốn giúp thì bạn làm 2 việc, thứ nhất sửa lại chổ Cao nhân, thứ hai phải có file mẫu và dữ liệu mẫu, sau đó mô tả chi tiết mong muốn của mình.
 
Upvote 0
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. Cảm ơn các bác
Hiện tại thì bạn đang làm cách nào?
 
Upvote 0
ở from: frm_IEport. em nhập dẽ liều vào Sheets CSDL, nhưng mỗi lần nhập xong thì trên list box của form nó ko tự động update giá trị mới lên, muốn xem phải tắt form và mở lại thì dữ liệu ở dòng cuối. và mình phải kéo listbox xuống dưới cùng mới thấy nó mà ko thể thấy lúc mình vừa nhập xong
Bài đã được tự động gộp:

Cách thì có, nhưng bạn sẽ không được giúp đỡ vì chẳng có ai dám tự nhận mình là Cao nhân đâu. Muốn giúp thì bạn làm 2 việc, thứ nhất sửa lại chổ Cao nhân, thứ hai phải có file mẫu và dữ liệu mẫu, sau đó mô tả chi tiết mong muốn của mình.
Phải gọi người làm dc là cao nhân, chứ những bạn như mình mới tập tành vba thì ko thể làm cao nhân dc.
 

File đính kèm

Upvote 0
ở from: frm_IEport. em nhập dẽ liều vào Sheets CSDL, nhưng mỗi lần nhập xong thì trên list box của form nó ko tự động update giá trị mới lên, muốn xem phải tắt form và mở lại thì dữ liệu ở dòng cuối. và mình phải kéo listbox xuống dưới cùng mới thấy nó mà ko thể thấy lúc mình vừa nhập xong
Bài đã được tự động gộp:


Phải gọi người làm dc là cao nhân, chứ những bạn như mình mới tập tành vba thì ko thể làm cao nhân dc.
Ủa, Bạn ở Thái NGuyên hả? Tiếc là mình không phải cao nhân nên ngồi hóng cao nhân vậy.
 
Upvote 0
ở from: frm_IEport. em nhập dẽ liều vào Sheets CSDL, nhưng mỗi lần nhập xong thì trên list box của form nó ko tự động update giá trị mới lên, muốn xem phải tắt form và mở lại thì dữ liệu ở dòng cuối. và mình phải kéo listbox xuống dưới cùng mới thấy nó mà ko thể thấy lúc mình vừa nhập xong
Bài đã được tự động gộp:


Phải gọi người làm dc là cao nhân, chứ những bạn như mình mới tập tành vba thì ko thể làm cao nhân dc.
Vậy giờ bạn muốn sao? Muốn vừa mở form và vừa nhập liệu được luôn? Mỗi lần nhập liệu xong, listbox tự cập nhật?
 
Upvote 0
Vậy giờ bạn muốn sao? Muốn vừa mở form và vừa nhập liệu được luôn? Mỗi lần nhập liệu xong, listbox tự cập nhật?
mở form hay nhập liệu thì ok hết rồi, chỉ là khi mình nhập mới 1 dòng thì trên list box nó ko update lên cho mình nhin thấy dc, và muốn xem giá trị mới đó trên listbox thì phải reset lại form
 
Upvote 0
mở form hay nhập liệu thì ok hết rồi, chỉ là khi mình nhập mới 1 dòng thì trên list box nó ko update lên cho mình nhin thấy dc, và muốn xem giá trị mới đó trên listbox thì phải reset lại form
Bạn có code tạo list cho listbox đó thì sau khi nhập xong thì gọi lại cái code đó thôi
 
Upvote 0
mở form hay nhập liệu thì ok hết rồi, chỉ là khi mình nhập mới 1 dòng thì trên list box nó ko update lên cho mình nhin thấy dc, và muốn xem giá trị mới đó trên listbox thì phải reset lại form
Chừa hỉnh dung được, bạn quay phim màn hình xem thử. Bởi tôi test trên máy tôi nó cập nhật bình thường
Trong file bạn có code:
Mã:
Private Sub UserForm_Initialize()
Dim endR As Long
cmd_SuaCSDL.Enabled = False
cmd_XoaCSDL.Enabled = False
endR = Sheet1.Range("B" & Rows.Count).End(xlUp).Row
arr = Sheet1.Range("B2:I" & endR)
With ListBox_CSDL
    .ColumnCount = 8
    .ColumnWidths = "80,250,70,150,50,50,50,50"
    .BoundColumn = 1
    .TextColumn = 2
    .List = arr

End With
End Sub
Code gán mảng cho ListBox thì không lý gì nó không cập nhật, cứ nhập xong rồi mở form thì sẽ thấy có ngay dữ liệu mới. Trừ phi bạn muốn vừa mở form vừa nhập liệu thì đó là chuyện khác
 
Upvote 0
Chừa hỉnh dung được, bạn quay phim màn hình xem thử. Bởi tôi test trên máy tôi nó cập nhật bình thường
Trong file bạn có code:
Mã:
Private Sub UserForm_Initialize()
Dim endR As Long
cmd_SuaCSDL.Enabled = False
cmd_XoaCSDL.Enabled = False
endR = Sheet1.Range("B" & Rows.Count).End(xlUp).Row
arr = Sheet1.Range("B2:I" & endR)
With ListBox_CSDL
    .ColumnCount = 8
    .ColumnWidths = "80,250,70,150,50,50,50,50"
    .BoundColumn = 1
    .TextColumn = 2
    .List = arr

End With
End Sub
Code gán mảng cho ListBox thì không lý gì nó không cập nhật, cứ nhập xong rồi mở form thì sẽ thấy có ngay dữ liệu mới. Trừ phi bạn muốn vừa mở form vừa nhập liệu thì đó là chuyện khác
Ý em là lúc mình nhập dữ liệu xong, kicks vào nút OK, thì trên listbox sẽ hiện thị luôn dữ liệu mình vừa nhập đó, và có thể thì làm cho list box đó mặc định hiện thì trường dữ liệu ở phía cuối của bảng csdl ý ạ?
Bài đã được tự động gộp:

Bạn có code tạo list cho listbox đó thì sau khi nhập xong thì gọi lại cái code đó thôi
mình cho vào sự kiện change hả bác?
 
Upvote 0
Ý em là lúc mình nhập dữ liệu xong, kicks vào nút OK, thì trên listbox sẽ hiện thị luôn dữ liệu mình vừa nhập đó, và có thể thì làm cho list box đó mặc định hiện thì trường dữ liệu ở phía cuối của bảng csdl ý ạ?
Bài đã được tự động gộp:


mình cho vào sự kiện change hả bác?
cho vào sự kiện khi bấm nút ok ấy, còn để cho nó chọn dòng nào thì dùng ListIndex.

sao bạn lạm dụng Worksheet_SelectionChange vậy, click vào cell cứ quay tròn, nên xác định khi nào sẽ chạy sub, không thì tạo cái nút để nó chạy
 
Upvote 0
Chừa hỉnh dung được, bạn quay phim màn hình xem thử. Bởi tôi test trên máy tôi nó cập nhật bình thường
Trong file bạn có code:
Mã:
Private Sub UserForm_Initialize()
Dim endR As Long
cmd_SuaCSDL.Enabled = False
cmd_XoaCSDL.Enabled = False
endR = Sheet1.Range("B" & Rows.Count).End(xlUp).Row
arr = Sheet1.Range("B2:I" & endR)
With ListBox_CSDL
    .ColumnCount = 8
    .ColumnWidths = "80,250,70,150,50,50,50,50"
    .BoundColumn = 1
    .TextColumn = 2
    .List = arr

End With
End Sub
Code gán mảng cho ListBox thì không lý gì nó không cập nhật, cứ nhập xong rồi mở form thì sẽ thấy có ngay dữ liệu mới. Trừ phi bạn muốn vừa mở form vừa nhập liệu thì đó là chuyện khác
dữ liệu cũ thì có, nhưng dữ liệu mình vừa nhập thêm vào thì ko thấy nó sau khi kích nút OK, muốn nhìn thấy dữ liệu mới phải tắt mở lại form
Bài đã được tự động gộp:

cho vào sự kiện khi bấm nút ok ấy, còn để cho nó chọn dòng nào thì dùng ListIndex.

sao bạn lạm dụng Worksheet_SelectionChange vậy, click vào cell cứ quay tròn, nên xác định khi nào sẽ chạy sub, không thì tạo cái nút để nó chạy
em làm việc chủ yếu tự động và dùng sub mà, tại nhiều lúc mình cần phải vào csdl để chỉnh sửa nội dung nên gán thêm cho vào sự kiện selectionchange thôi bác
 
Lần chỉnh sửa cuối:
Upvote 0
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.
 
Upvote 0
Tôi không theo dõi chi tiết code của bạn.
Tôi hiểu là bạn nhập một vùng dữ liệu vào ListBox. Tôi hiểu là khi bạn nhấn một nút thêm dữ liệu nào đó thì các giá trị từ Form được code đập vào sheet ở dòng trống đầu tiên.của sheet. Bây giờ bạn muốn là những dữ liệu kia cũng xuất hiện trong ListBox? Nếu thế ngoài việc đập xuống sheet thì làm thêm việc thêm chúng vào ListBox thôi. ListBox có phương thức AddItem. Hoặc thay cho AddItem thì nhập lại dữ liệu từ sheet vào ListBox. Nhưng code trong UserForm_Initialize nó làm việc này nên thay vì lặp lại code nhập dữ liệu thì sau khi đập xuống sheet thì thêm 1 dòng
Mã:
UserForm_Initialize

Nếu muốn chọn dòng cuối thì lại thêm 1 dòng
Mã:
ListBox_CSDL.ListIndex = ListBox_CSDL.ListCount - 1

Nói nôm na thì thêm 2 dòng trên sau đoạn code đập xuống sheet.

Chịu khó suy nghĩ lôgíc đi bạn
 
Upvote 0
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 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?
 
Upvote 0
Tôi không theo dõi chi tiết code của bạn.
Tôi hiểu là bạn nhập một vùng dữ liệu vào ListBox. Tôi hiểu là khi bạn nhấn một nút thêm dữ liệu nào đó thì các giá trị từ Form được code đập vào sheet ở dòng trống đầu tiên.của sheet. Bây giờ bạn muốn là những dữ liệu kia cũng xuất hiện trong ListBox? Nếu thế ngoài việc đập xuống sheet thì làm thêm việc thêm chúng vào ListBox thôi. ListBox có phương thức AddItem. Hoặc thay cho AddItem thì nhập lại dữ liệu từ sheet vào ListBox. Nhưng code trong UserForm_Initialize nó làm việc này nên thay vì lặp lại code nhập dữ liệu thì sau khi đập xuống sheet thì thêm 1 dòng
Mã:
UserForm_Initialize

Nếu muốn chọn dòng cuối thì lại thêm 1 dòng
Mã:
ListBox_CSDL.ListIndex = ListBox_CSDL.ListCount - 1

Nói nôm na thì thêm 2 dòng trên sau đoạn code đập xuống sheet.

Chịu khó suy nghĩ lôgíc đi bạn
Bài đã được tự động gộp:

Tôi không theo dõi chi tiết code của bạn.
Tôi hiểu là bạn nhập một vùng dữ liệu vào ListBox. Tôi hiểu là khi bạn nhấn một nút thêm dữ liệu nào đó thì các giá trị từ Form được code đập vào sheet ở dòng trống đầu tiên.của sheet. Bây giờ bạn muốn là những dữ liệu kia cũng xuất hiện trong ListBox? Nếu thế ngoài việc đập xuống sheet thì làm thêm việc thêm chúng vào ListBox thôi. ListBox có phương thức AddItem. Hoặc thay cho AddItem thì nhập lại dữ liệu từ sheet vào ListBox. Nhưng code trong UserForm_Initialize nó làm việc này nên thay vì lặp lại code nhập dữ liệu thì sau khi đập xuống sheet thì thêm 1 dòng
Mã:
UserForm_Initialize

Nếu muốn chọn dòng cuối thì lại thêm 1 dòng
Mã:
ListBox_CSDL.ListIndex = ListBox_CSDL.ListCount - 1

Nói nôm na thì thêm 2 dòng trên sau đoạn code đập xuống sheet.

Chịu khó suy nghĩ lôgíc đi bạn
thanks bác! đã chọn dc dòng cuối để xem, còn làm mới listbox để mình xem luôn giá trị sau khi mình nhập vào thì e làm chưa dc, bác xem giúp em.
Bài đã được tự động gộp:

Tôi không theo dõi chi tiết code của bạn.
Tôi hiểu là bạn nhập một vùng dữ liệu vào ListBox. Tôi hiểu là khi bạn nhấn một nút thêm dữ liệu nào đó thì các giá trị từ Form được code đập vào sheet ở dòng trống đầu tiên.của sheet. Bây giờ bạn muốn là những dữ liệu kia cũng xuất hiện trong ListBox? Nếu thế ngoài việc đập xuống sheet thì làm thêm việc thêm chúng vào ListBox thôi. ListBox có phương thức AddItem. Hoặc thay cho AddItem thì nhập lại dữ liệu từ sheet vào ListBox. Nhưng code trong UserForm_Initialize nó làm việc này nên thay vì lặp lại code nhập dữ liệu thì sau khi đập xuống sheet thì thêm 1 dòng
Mã:
UserForm_Initialize

Nếu muốn chọn dòng cuối thì lại thêm 1 dòng
Mã:
ListBox_CSDL.ListIndex = ListBox_CSDL.ListCount - 1

Nói nôm na thì thêm 2 dòng trên sau đoạn code đập xuống sheet.

Chịu khó suy nghĩ lôgíc đi bạn
Giải quyết xong rồi bác!. Cao nhân đây chứ còn đâu nữa.
 
Upvote 0
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

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

Back
Top Bottom