RE: Lỗi Name khi liên kết giữa listbox và subform
ongke0711 > 31-07-19, 09:39 PM
Bạn phải chú ý cái Record Source làm nguồn cho SubForm.
Mặc định Record Source khi Form load là bạn dùng query (câu lệnh SQL) có thêm trường [SoLuongCL] là trường tính toán bạn thêm vô. Sau đó bạn xử lý khi click chọn trong listbox bên trái thì chỉ gán Record Source là toàn bộ các trường trong table [DanhMucHang] nhưng không có trường [SoLuongCL] => nó báo lỗi Name vì trường này không tồn tại sau khi gán.
Cách sửa là bạn copy toàn bộ câu lệnh SQL gốc của subform ban đầu khi Load lên đưa vô VBA + thêm điều kiện WHERE của bạn rồi mới gán Source.
Một điều nữa là công thức tính [SoLuongCL]. Thay vì dùng IIF ...IsNull,.... => bạn dùng hàm Nz() để khử giá trị Null là được rồi.
SoLuongCL: IIF([SoLuongSD] Is Null, [SoLuongKH], [SoLuongKH] - [SoLuongSD])
Đổi lại thành:
SoLuongCL: Nz([SoLuongKH])-Nz([SoLuongSD])
----------------------
Private Sub lstcongty_Click()
Dim sSQL As String
sSQL = "SELECT DanhMucHang.MaHH, DanhMucHang.TenHH, DanhMucHang.Hamluong, DanhMucHang.DVT, DanhMucHang.DonGia, " & _
"DanhMucHang.SoLuongKH, DanhMucHang.SoluongSD, Nz([SoLuongKH])-Nz([SoLuongSD]) AS SoluongCL, DanhMucHang.Macty " & _
"FROM DanhMucCongTy INNER JOIN DanhMucHang ON DanhMucCongTy.macty = DanhMucHang.Macty " & _
"WHERE DanhMucHang.Macty='" & Me.lstcongty.Column(0) & "'"
Me.sub_theodoislkh.Form.RecordSource = sSQL
Me.sub_theodoislkh.Requery
End Sub
----------------------