Vấn đề Listbox trên form (1 người xem)

  • Thread starter Thread starter pro8x
  • Ngày gửi Ngày gửi
Liên hệ QC

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

pro8x

Thành viên hoạt động
Tham gia
3/11/11
Bài viết
142
Được thích
24
Chào các anh/chị.
Hiện tại e có dùng 1 form để nhập liệu và trên form có List để xem những gì đã nhập vào. E có 1 vấn đề là List này chỉ hiện thị những thông tin nhập đầu tiên còn sau này khi nhập nhiều thông tin vào muốn xem phải kéo thanh cuộn để xem thông tin mới nhất.
E muốn hỏi là có cách nào để thông tin mới nhất nhập vào thì litsbox hiện luôn đén phần đó không.( không phải kéo thanh cuộn).
Em gửi kèm luôn file mong các anh/chị giúp
untitled.JPG
 

File đính kèm

Bạn thêm dòng lệnh này
Mã:
ListBox1.Selected(Sheets("Nhap lieu").[A65536].End(3).Row - 5) = True
trong sự kiện UserForm_Initialize
 
Upvote 0
Em xin cảm ơn ạ.Ah tiện cho e hỏi là muốn khi nhấn Tab/Enter thì con chỏ chuột nhảy từ Texbox này sang texbox khác theo thứ tự của mình muốn thì chỉnh chỗ nào vậy,e mò mãi k được
 
Upvote 0
Em xin cảm ơn ạ.Ah tiện cho e hỏi là muốn khi nhấn Tab/Enter thì con chỏ chuột nhảy từ Texbox này sang texbox khác theo thứ tự của mình muốn thì chỉnh chỗ nào vậy,e mò mãi k được
Chọn TextBox, trong Properties của nó, chọn TabIndex, gõ vào số thứ tự mong muốn bắt đầu từ số 0.

Lưu ý, khi không muốn tab vào thì chọn TabStop là False.


Bạn thêm dòng lệnh này
Mã:
ListBox1.Selected(Sheets("Nhap lieu").[A65536].End(3).Row - 5) = True
trong sự kiện UserForm_Initialize

Ai mà lại dùng cấu trúc kỳ lạ vậy đồng chí!

Lẽ ra phải như thủ tục dưới đây để chọn hàng cuối của ListBox chứ:

Mã:
ListBox1.ListIndex = ListBox1.ListCount - 1
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các anh/chị.
Hiện tại e có dùng 1 form để nhập liệu và trên form có List để xem những gì đã nhập vào. E có 1 vấn đề là List này chỉ hiện thị những thông tin nhập đầu tiên còn sau này khi nhập nhiều thông tin vào muốn xem phải kéo thanh cuộn để xem thông tin mới nhất.
E muốn hỏi là có cách nào để thông tin mới nhất nhập vào thì litsbox hiện luôn đén phần đó không.( không phải kéo thanh cuộn).
Em gửi kèm luôn file mong các anh/chị giúp

Cái file của bạn có ListBox mà bạn Chọn RowSource với cái Name bao gồm cả dòng trống như thế thật không hay tí nào cả.

Lúc đầu tôi định sửa vài chỗ cho bạn trên cái form đó, nhưng nhìn lại sao mà rối mắt kinh khủng, lại còn đan xen các hàm VLOOKUP gì tùm lum, lỗi tùm lum! Tôi đành phải làm lại code trên form bạn hết như sau:

Sự kiện Form:

Mã:
Private Sub UserForm_Initialize()
    Application.WindowState = xlMaximized
    Me.Top = 0: Me.Left = 0
    Me.Width = Application.Width
    Me.Height = Application.Height

    With ShockwaveFlash1
        .Top = 6
        .Left = 624
        .Width = 63
        .Height = 63
    End With
    
    MyControls = Array(txtSoTT, cbxMayDuc, cbxCaSX, txtNgayDuc, cbxMaSanPham, _
                       cbxKhuon, txtGioCheck, cbxNguoiCheck, txtKetQuaOK, txtCavity, _
                       cbxLoiNG, cbxNguoiGiaiQuyet, txtGioKT, txtKiemTraHop, txtThaoTacOP, _
                       cbxNguoiKT, txtGioCapNhua, txtGioKiemTraCN, txtNhaCungCap, txtNhaSX, _
                       cbxTenNhua, txtLaiNhua, cbxMaMau, cbxMauNhua, txtTaiSDActua, _
                       txtTaiSDOK, cbxCapDoCChay, cbxNguoiKTCuoi, txtGHICHU)
    
    Dim iRow As Long
    With Sheets("Nhap lieu")
        iRow = .Range("A65536").End(xlUp).Row
        .Range("A5:AC" & iRow).Name = "ListBoxNhapLieu"
        ListBox1.RowSource = "ListBoxNhapLieu"
        ListBox1.ListIndex = ListBox1.ListCount - 1
    End With
    
End Sub

Sự kiện ListBox:

Mã:
Private Sub ListBox1_Change()
    Dim i As Long
    For i = 0 To 28
        MyControls(i).Text = ""
        MyControls(i).Text = ListBox1.List(, i)
    Next
    [COLOR=#0000ff]txtNgayDuc = Format(txtNgayDuc, "dd/mm/yyyy")[/COLOR]
End Sub

Sự kiện CommanButton:

Nhập dữ liệu:

Mã:
Private Sub cmdNhapLieu_Click()
    If Me.txtSoTT.Value = "" Then
        MsgBox "Chua nhap Só Thu tu.", vbExclamation, "Nhap lieu"
        Me.txtSoTT.SetFocus
        Exit Sub
    End If
    If Me.cbxMayDuc.Value = "" Then
        MsgBox "Chua Nhap May Duc", vbExclamation, "Nhap lieu"
        Me.cbxMayDuc.SetFocus
        Exit Sub
    End If
    
    'Write data to worksheet
    Dim iRow As Long, i As Long, MyCtrls()
    MyCtrls = Array([COLOR=#ff0000]Val(txtSoTT)[/COLOR], cbxMayDuc, cbxCaSX, [COLOR=#ff0000]CDate(txtNgayDuc)[/COLOR], cbxMaSanPham, _
                       cbxKhuon, [COLOR=#ff0000]Val(txtGioCheck)[/COLOR], cbxNguoiCheck, txtKetQuaOK, txtCavity, _
                       cbxLoiNG, cbxNguoiGiaiQuyet, [COLOR=#ff0000]Val(txtGioKT)[/COLOR], txtKiemTraHop, txtThaoTacOP, _
                       cbxNguoiKT, [COLOR=#ff0000]Val(txtGioCapNhua)[/COLOR], [COLOR=#ff0000]Val(txtGioKiemTraCN)[/COLOR], txtNhaCungCap, txtNhaSX, _
                       cbxTenNhua, txtLaiNhua, cbxMaMau, cbxMauNhua, txtTaiSDActua, _
                       txtTaiSDOK, cbxCapDoCChay, cbxNguoiKTCuoi, txtGHICHU)
                       
    Sheets("Nhap lieu").Range("A65536").End(xlUp).Offset(1).Resize(, 29) = MyCtrls
    
    With Sheets("Nhap lieu")
        iRow = .Range("A65536").End(xlUp).Row
        .Range("A5:AC" & iRow).Name = "ListBoxNhapLieu"
        ListBox1.RowSource = "ListBoxNhapLieu"
    End With
    
    MsgBox "NHAP DU LIEU XONG", vbExclamation, "Nhap lieu"
    
    For i = 0 To 28
        MyControls(i).Text = ""
    Next
    ListBox1.ListIndex = ListBox1.ListCount - 1
End Sub

Sửa dữ liệu:

Mã:
Private Sub cmdSuaDuLieu_Click()
    Dim iRow As Long, i As Long, MyCtrls()
    MyCtrls = Array(Val(txtSoTT), cbxMayDuc, cbxCaSX, CDate(txtNgayDuc), cbxMaSanPham, _
                       cbxKhuon, Val(txtGioCheck), cbxNguoiCheck, txtKetQuaOK, txtCavity, _
                       cbxLoiNG, cbxNguoiGiaiQuyet, Val(txtGioKT), txtKiemTraHop, txtThaoTacOP, _
                       cbxNguoiKT, Val(txtGioCapNhua), Val(txtGioKiemTraCN), txtNhaCungCap, txtNhaSX, _
                       cbxTenNhua, txtLaiNhua, cbxMaMau, cbxMauNhua, txtTaiSDActua, _
                       txtTaiSDOK, cbxCapDoCChay, cbxNguoiKTCuoi, txtGHICHU)
                       
    Range("ListBoxNhapLieu").Offset(ListBox1.ListIndex).Resize(1).Value = MyCtrls
    
    MsgBox "SUA DU LIEU XONG", vbExclamation, "Nhap lieu"
    
    For i = 0 To 28
        MyControls(i).Text = ""
    Next
End Sub
 

File đính kèm

Upvote 0
Ai mà lại dùng cấu trúc kỳ lạ vậy đồng chí!

Lẽ ra phải như thủ tục dưới đây để chọn hàng cuối của ListBox chứ:

Mã:
ListBox1.ListIndex = ListBox1.ListCount - 1

Anh Nghĩa, bạn ấy chọn Rowsource cho cả một vùng nên chọn dòng cuối thì dùng phương pháp của anh sẽ báo lỗi.
Dùng phương pháp gán Rowsource động theo bài #5 của anh thì dùng phương pháp này được và "chuyên nghiệp" nữa :)
 
Upvote 0
Anh Nghĩa, bạn ấy chọn Rowsource cho cả một vùng nên chọn dòng cuối thì dùng phương pháp của anh sẽ báo lỗi.
Dùng phương pháp gán Rowsource động theo bài #5 của anh thì dùng phương pháp này được và "chuyên nghiệp" nữa :)

Không phải nó bị lỗi vì dùng RowSource, mà bởi vì cái ListBox nó có thuộc tính Change, mà đồng chí tác giả lại sử dụng hàm VLOOKUP, khi chọn vào hàng rỗng sẽ bị lỗi #N/A! vì thế sẽ phát sinh ra lỗi! Chính điều này anh đã thay thủ tục cũ bằng thủ tục mới này:

Mã:
Private Sub ListBox1_Change()


    Dim i As Long
    For i = 0 To 28
        MyControls(i).Text = ""
        MyControls(i).Text = ListBox1.List(, i)
    Next
    txtNgayDuc = Format(txtNgayDuc, "dd/mm/yyyy")
    
End Sub

Dữ liệu đã có sẳn trên FORM mà không xài, cứ mãi đi tìm kiếm trong SHEET chi cho mệt óc và rắc rối!
 
Upvote 0
Em xin cảm ơn các thầy, các anh/chị.Hi.Giờ mới đi làm về mới lên 4r được ạ
 
Upvote 0
Em xin cảm ơn các thầy, các anh/chị.Hi.Giờ mới đi làm về mới lên 4r được ạ

Mục đích List Box trong File em là dùng lấy dữ liệu có sẳn từ 1 sheet khác làm nguồn để giảm thiểu thao tác cho việc nhập liệu, do đó trong Name nên sửa lại là vùng có chứa dữ liệu, nếu vùng chứa dữ liệu có dòng rổng thì bị lỗi là phải rồi (vì nó không tìm ra dữ lệu để Load vào Form), em thử thao tác lại ở File đầu tiên thì sẽ hiểu lý do lỗi.
 
Upvote 0
Cái file của bạn có ListBox mà bạn Chọn RowSource với cái Name bao gồm cả dòng trống như thế thật không hay tí nào cả.

Lúc đầu tôi định sửa vài chỗ cho bạn trên cái form đó, nhưng nhìn lại sao mà rối mắt kinh khủng, lại còn đan xen các hàm VLOOKUP gì tùm lum, lỗi tùm lum! Tôi đành phải làm lại code trên form bạn hết như sau:

Sự kiện Form:

Mã:
Private Sub UserForm_Initialize()
    Application.WindowState = xlMaximized
    Me.Top = 0: Me.Left = 0
    Me.Width = Application.Width
    Me.Height = Application.Height

    With ShockwaveFlash1
        .Top = 6
        .Left = 624
        .Width = 63
        .Height = 63
    End With
    
    MyControls = Array(txtSoTT, cbxMayDuc, cbxCaSX, txtNgayDuc, cbxMaSanPham, _
                       cbxKhuon, txtGioCheck, cbxNguoiCheck, txtKetQuaOK, txtCavity, _
                       cbxLoiNG, cbxNguoiGiaiQuyet, txtGioKT, txtKiemTraHop, txtThaoTacOP, _
                       cbxNguoiKT, txtGioCapNhua, txtGioKiemTraCN, txtNhaCungCap, txtNhaSX, _
                       cbxTenNhua, txtLaiNhua, cbxMaMau, cbxMauNhua, txtTaiSDActua, _
                       txtTaiSDOK, cbxCapDoCChay, cbxNguoiKTCuoi, txtGHICHU)
    
    Dim iRow As Long
    With Sheets("Nhap lieu")
        iRow = .Range("A65536").End(xlUp).Row
        .Range("A5:AC" & iRow).Name = "ListBoxNhapLieu"
        ListBox1.RowSource = "ListBoxNhapLieu"
        ListBox1.ListIndex = ListBox1.ListCount - 1
    End With
    
End Sub

Sự kiện ListBox:

Mã:
Private Sub ListBox1_Change()
    Dim i As Long
    For i = 0 To 28
        MyControls(i).Text = ""
        MyControls(i).Text = ListBox1.List(, i)
    Next
    [COLOR=#0000ff]txtNgayDuc = Format(txtNgayDuc, "dd/mm/yyyy")[/COLOR]
End Sub

Sự kiện CommanButton:

Nhập dữ liệu:

Mã:
Private Sub cmdNhapLieu_Click()
    If Me.txtSoTT.Value = "" Then
        MsgBox "Chua nhap Só Thu tu.", vbExclamation, "Nhap lieu"
        Me.txtSoTT.SetFocus
        Exit Sub
    End If
    If Me.cbxMayDuc.Value = "" Then
        MsgBox "Chua Nhap May Duc", vbExclamation, "Nhap lieu"
        Me.cbxMayDuc.SetFocus
        Exit Sub
    End If
    
    'Write data to worksheet
    Dim iRow As Long, i As Long, MyCtrls()
    MyCtrls = Array([COLOR=#ff0000]Val(txtSoTT)[/COLOR], cbxMayDuc, cbxCaSX, [COLOR=#ff0000]CDate(txtNgayDuc)[/COLOR], cbxMaSanPham, _
                       cbxKhuon, [COLOR=#ff0000]Val(txtGioCheck)[/COLOR], cbxNguoiCheck, txtKetQuaOK, txtCavity, _
                       cbxLoiNG, cbxNguoiGiaiQuyet, [COLOR=#ff0000]Val(txtGioKT)[/COLOR], txtKiemTraHop, txtThaoTacOP, _
                       cbxNguoiKT, [COLOR=#ff0000]Val(txtGioCapNhua)[/COLOR], [COLOR=#ff0000]Val(txtGioKiemTraCN)[/COLOR], txtNhaCungCap, txtNhaSX, _
                       cbxTenNhua, txtLaiNhua, cbxMaMau, cbxMauNhua, txtTaiSDActua, _
                       txtTaiSDOK, cbxCapDoCChay, cbxNguoiKTCuoi, txtGHICHU)
                       
    Sheets("Nhap lieu").Range("A65536").End(xlUp).Offset(1).Resize(, 29) = MyCtrls
    
    With Sheets("Nhap lieu")
        iRow = .Range("A65536").End(xlUp).Row
        .Range("A5:AC" & iRow).Name = "ListBoxNhapLieu"
        ListBox1.RowSource = "ListBoxNhapLieu"
    End With
    
    MsgBox "NHAP DU LIEU XONG", vbExclamation, "Nhap lieu"
    
    For i = 0 To 28
        MyControls(i).Text = ""
    Next
    ListBox1.ListIndex = ListBox1.ListCount - 1
End Sub

Sửa dữ liệu:

Mã:
Private Sub cmdSuaDuLieu_Click()
    Dim iRow As Long, i As Long, MyCtrls()
    MyCtrls = Array(Val(txtSoTT), cbxMayDuc, cbxCaSX, CDate(txtNgayDuc), cbxMaSanPham, _
                       cbxKhuon, Val(txtGioCheck), cbxNguoiCheck, txtKetQuaOK, txtCavity, _
                       cbxLoiNG, cbxNguoiGiaiQuyet, Val(txtGioKT), txtKiemTraHop, txtThaoTacOP, _
                       cbxNguoiKT, Val(txtGioCapNhua), Val(txtGioKiemTraCN), txtNhaCungCap, txtNhaSX, _
                       cbxTenNhua, txtLaiNhua, cbxMaMau, cbxMauNhua, txtTaiSDActua, _
                       txtTaiSDOK, cbxCapDoCChay, cbxNguoiKTCuoi, txtGHICHU)
                       
    Range("ListBoxNhapLieu").Offset(ListBox1.ListIndex).Resize(1).Value = MyCtrls
    
    MsgBox "SUA DU LIEU XONG", vbExclamation, "Nhap lieu"
    
    For i = 0 To 28
        MyControls(i).Text = ""
    Next
End Sub
Như code ở trên thì đã có Nút: Thêm, Sữa,
Vậy còn trường trường hợp cho nút Xóa thì làm sao hả anh
 
Upvote 0
Đây là đoạn code em viết cho nút Xóa (xóa dòng trên listbox và ngoài Sheet)
[GPECODE=vb]Private Sub cmd_Xoa_Click() Dim i As Long
Dim TraLoi As String
TraLoi = MsgBox("Ban co muon Xoa", vbDefaultButton2 + vbQuestion + vbYesNo, "TB")
If TraLoi = vbYes Then
With ListBox1
For i = .ListCount - 1 To 0 Step -1
If .Selected(i) Then
Sheets("VR-2015").Rows(i + 9).EntireRow.Delete
ListBox1.RowSource = "ListBoxNhapLieu"
' ListBox1.ListIndex = ListBox1.ListCount - 1
End If
Next i
End With
MsgBox (" Da xoa xong")
End If
End Sub[/GPECODE]
Nhưng không chạy được. Nhờ các anh chị giúp em chỉnh sữa lại
P/s: đã chỉnh sữa xong code Nút Xóa theo file của em
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom