Lỗi Listbox Error " Could not Set the List property. Invalid Property Value."

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

redhot

Thành viên mới
Tham gia
1/10/08
Bài viết
22
Được thích
2
Xin chào các bạn,
Mình đang mò mẫm và học cách viết vba trên excel, vấn đề của mình là khi click vào listbox thì code báo lỗi như tiêu đề. Mình suy nghĩ mãi và tìm các cách khác mà cũng không được. Nhờ bạn nào biết xin chỉ giúp, mình có đính kèm file với username, pass đều là admin, các bạn mở ra, sau đó click add button, gõ vài kí tự trong mục supplier, sau đó click chọn trên listbox thì lỗi xuất hiện.
 
Xin chào các bạn,
Mình đang mò mẫm và học cách viết vba trên excel, vấn đề của mình là khi click vào listbox thì code báo lỗi như tiêu đề. Mình suy nghĩ mãi và tìm các cách khác mà cũng không được. Nhờ bạn nào biết xin chỉ giúp, mình có đính kèm file với username, pass đều là admin, các bạn mở ra, sau đó click add button, gõ vài kí tự trong mục supplier, sau đó click chọn trên listbox thì lỗi xuất hiện.
Vừa mở file lên có user và pass đăng nhập là đã không muốn yêu thương rồi. Thôi thì chờ đi. Xem có thành viên nào hứng thú thì giúp bạn thì vào
 
Upvote 0
Xin chào các bạn,
Mình đang mò mẫm và học cách viết vba trên excel, vấn đề của mình là khi click vào listbox thì code báo lỗi như tiêu đề. Mình suy nghĩ mãi và tìm các cách khác mà cũng không được. Nhờ bạn nào biết xin chỉ giúp, mình có đính kèm file với username, pass đều là admin, các bạn mở ra, sau đó click add button, gõ vài kí tự trong mục supplier, sau đó click chọn trên listbox thì lỗi xuất hiện.
Bạn sửa lại sự kiện này nhé!
Mã:
Private Sub ListBox_spl_Click()
    With ListBox_spl
        If .ListIndex > -1 Then
            Dim strSupplier As String, strTaxNo As String, strLink As String
            strSupplier = .List(.ListIndex, 0)
            strTaxNo = .List(.ListIndex, 1)
            strLink = .List(.ListIndex, 2)
            txt_supplier.Value = strSupplier
            txt_Taxno.Value = strTaxNo
            Txt_Link.Value = strLink
        Else
            txt_supplier.Value = .List(0, 0)
            txt_Taxno.Value = .List(0, 1)
            Txt_Link.Value = .List(0, 2)
        End If
    End With
        ListBox_spl.Visible = False
        Me.txt_Taxno.Enabled = False
        Me.Txt_Link.Enabled = False
        Me.Txt_InvDate.SetFocus
End Sub
 
Upvote 0
Bạn sửa lại sự kiện này nhé!
Mã:
Private Sub ListBox_spl_Click()
    With ListBox_spl
        If .ListIndex > -1 Then
            Dim strSupplier As String, strTaxNo As String, strLink As String
            strSupplier = .List(.ListIndex, 0)
            strTaxNo = .List(.ListIndex, 1)
            strLink = .List(.ListIndex, 2)
            txt_supplier.Value = strSupplier
            txt_Taxno.Value = strTaxNo
            Txt_Link.Value = strLink
[/QUOTE]
Mình ko hiểu ngay chổ này, tại sao là .listindex > -1, mình chỉ hiểu là nếu ko có item nào thì lúc đó listindex = 0,
và tại sao ko gán giá trị trực tiếp mà phải qua trung gian bằng cách khai báo thêm các biến strSupplier...,
Xin đa tạ bác huhumalu nhiều! Mình sửa lại code và chạy ngon lành rồi bác.
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào các bạn,
Mình đang mò mẫm và học cách viết vba trên excel, vấn đề của mình là khi click vào listbox thì code báo lỗi như tiêu đề. Mình suy nghĩ mãi và tìm các cách khác mà cũng không được. Nhờ bạn nào biết xin chỉ giúp, mình có đính kèm file với username, pass đều là admin, các bạn mở ra, sau đó click add button, gõ vài kí tự trong mục supplier, sau đó click chọn trên listbox thì lỗi xuất hiện.
Mình gởi lại file attach, dành cho các bạn nào mới tập tành code vba như mình, trong đó có 1 cái form nhập user name và pass, 1 cái form dành cho customer (trong này có kết hợp tìm kiếm trên textbox và listbox), còn 1 form đang viết dở
 

File đính kèm

  • Hoadonso.xlsm
    327 KB · Đọc: 15
Upvote 0
Mình ko hiểu ngay chổ này, tại sao là .listindex > -1, mình chỉ hiểu là nếu ko có item nào thì lúc đó listindex = 0,
và tại sao ko gán giá trị trực tiếp mà phải qua trung gian bằng cách khai báo thêm các biến strSupplier...
1) ListIndex = 0 tức là dòng đầu tiên, còn -1 là Index nó ẩn, chưa được select. Nếu ta ghi > 0 tức là loại bỏ dòng đầu tiên, vì thế ta phải cho nó >-1.

2) Tại sao không gán giá trị trực tiếp? Nguyên nhân gây ra lỗi chính là chỗ này đây! Do TextBox Supplier nó có sự kiện Change, nếu ta thay đổi giá trị hiện tại gán cho TextBox đó, nó sẽ chạy sự kiện Change và gây ra lỗi vì lúc này ListBox đã bị Clear, ListIndex đã trở về -1 nên sẽ không thể dùng Index để tính List được.
 
Lần chỉnh sửa cuối:
Upvote 0
1) ListIndex = 0 tức là dòng đầu tiên, còn -1 là Index nó ẩn, chưa được select. Nếu ta ghi > 0 tức là loại bỏ dòng đầu tiên, vì thế ta phải cho nó >-1.

2) Tại sao không gán giá trị trực tiếp? Nguyên nhân gây ra lỗi chính là chỗ này đây! Do TextBox Supplier nó có sự kiện Change, nếu ta thay đổi giá trị hiện tại gán cho TextBox đó, nó sẽ chạy sự kiện Change và gây ra lỗi vì lúc này ListBox đã bị Clear, ListIndex đã trở về -1 nên sẽ không thể dùng Index để tính List được.
Thật sự cảm tạ bác, cái vấn đề này làm khó mình mấy ngày nay. Lên search mấy trang nước ngoài thì mỗi trường hợp mỗi kiểu, còn trang giaiphapexcel thì kiếm chưa ra trường hợp lỗi này.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Thật sự cảm tạ bác, cái vấn đề này làm khó mình mấy ngày nay. Lên search mấy trang nước ngoài thì mỗi trường hợp mỗi kiểu, còn trang giaiphapexcel thì kiếm chưa ra trường hợp lỗi này.
Do bạn chưa tìm thấy chứ hầu hết lỗi này, không ít thì nhiều cũng có đầy trên GPE, tuy nhiên mỗi trường hợp gây ra lỗi mỗi khác biệt, quan trọng là mình phải suy luận nguyên nhân xuất phát từ đâu để ngăn cho nó không bị lỗi.

Nếu muốn làm trực tiếp mà không cần gán biến cũng được, ta phải có giải pháp khác, ngăn không cho sự kiện Change của TextBox Supplier chạy, bằng cách nào thì bạn thử suy nghĩ xem, tôi nghĩ cách này hay hơn đó. Suy nghĩ đi.
 
Upvote 0
Private Sub txt_supplier_Change()
Dim i As Long
With ListBox_spl
.Clear
.Visible = True
.ColumnCount = 3
.ColumnWidths = "220,75,100"
.BoundColumn = 1
.TextColumn = 3

For i = LBound(arr1, 1) To UBound(arr1, 1)
If InStr(LCase$(arr1(i, 1)), LCase$((Me.txt_supplier.Text))) Then
.AddItem arr1(i, 1)
.List(.ListCount - 1, 1) = arr1(i, 2)
.List(.ListCount - 1, 2) = arr1(i, 3)
End If
Next i
End With
End Sub

Private Sub ListBox_spl_Click()
Dim a As Integer
With ListBox_spl
For a = 0 To .ListCount - 1 Step 1
If .Selected(a) = True Then
txt_supplier.Value = .List(a, 0)
txt_Taxno.Value = .List(a, 1)
Txt_Link.Value = .List(a, 2)

End If
Next a
.Visible = False
End With
Me.txt_Taxno.Enabled = False
Me.Txt_Link.Enabled = False
Me.Txt_InvDate.SetFocus
End Sub

Theo lối tư duy của mình, thì mỗi khi thằng txt_supplier chạy thì dù có chạy n lần thì cũng tạo ra n lần listbox, và mình cứ làm việc trên listbox thôi. Không nghĩ là mình bị sai từ cái chổ khai báo .clear trên listbox
 
Upvote 0
Private Sub txt_supplier_Change()
Dim i As Long
With ListBox_spl
.Clear
.Visible = True
.ColumnCount = 3
.ColumnWidths = "220,75,100"
.BoundColumn = 1
.TextColumn = 3

For i = LBound(arr1, 1) To UBound(arr1, 1)
If InStr(LCase$(arr1(i, 1)), LCase$((Me.txt_supplier.Text))) Then
.AddItem arr1(i, 1)
.List(.ListCount - 1, 1) = arr1(i, 2)
.List(.ListCount - 1, 2) = arr1(i, 3)
End If
Next i
End With
End Sub

Private Sub ListBox_spl_Click()
Dim a As Integer
With ListBox_spl
For a = 0 To .ListCount - 1 Step 1
If .Selected(a) = True Then
txt_supplier.Value = .List(a, 0)
txt_Taxno.Value = .List(a, 1)
Txt_Link.Value = .List(a, 2)

End If
Next a
.Visible = False
End With
Me.txt_Taxno.Enabled = False
Me.Txt_Link.Enabled = False
Me.Txt_InvDate.SetFocus
End Sub

Theo lối tư duy của mình, thì mỗi khi thằng txt_supplier chạy thì dù có chạy n lần thì cũng tạo ra n lần listbox, và mình cứ làm việc trên listbox thôi. Không nghĩ là mình bị sai từ cái chổ khai báo .clear trên listbox
Kakaka, làm vậy code chạy cháy máy! Gợi ý, bạn thử làm một biến Boolean xem sao.
 
Upvote 0
Web KT

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

Back
Top Bottom