Tôi đang cố gắng tìm ra một tình huống kỳ quái.Excel ActiveX Listbox không được bật trên hồ sơ mở
Tôi có sổ làm việc với nhiều trang tính. Trên một trang tính, tôi có một hộp danh sách ActiveX (CTOverview.Listbox1). Trên trang tính thứ hai, tôi có tổng cộng ba hộp danh sách (CTSelected.Listbox1 thông qua Listbox3). Tôi đang sử dụng truy vấn để điền ListBox1 trên cả hai trang tính có cùng dữ liệu. Mã cho điều này là dưới đây:
strSQL = "Select Distinct [Region] From [UniqueCTList$] Order by [Region]"
closeRS
OpenDB
' initialize listboxes
CTSelect.ListBox1.Clear
CTSelect.ListBox2.Clear
CTSelect.ListBox3.Clear
CTOverview.ListBox1.Clear
' initialize with entire division value
CTSelect.ListBox1.AddItem "Entire Division"
CTOverview.ListBox1.AddItem "Entire Division"
' initialize selected Tech
CTData.Range("CT_Selected") = ""
' populate listboxes using recordset
rs.Open strSQL, cnn, adOpenKeyset, adLockOptimistic
If rs.RecordCount > 0 Then
Do While Not rs.EOF
CTOverview.ListBox1.AddItem rs.Fields(0)
CTSelect.ListBox1.AddItem rs.Fields(0)
rs.MoveNext
Loop
Else
MsgBox "I was not able to find any unique Regions.", vbCritical + vbOKOnly
Exit Sub
End If
Mã này hoạt động đẹp mắt (không phải mã của tôi - tôi nhận nó từ nội bộ). Cả hai LIstbox1 trên cả hai tấm tải với danh sách các khu vực riêng biệt. Tuy nhiên, tôi không thể nhận CTOverview.Listbox1 để trả lời bất kỳ đầu vào nào cho đến khi tôi đã chọn một cái gì đó từ CTSelected.Listbox1. Một khi tôi làm điều đó, cả hai công việc của Listbox1 bình thường và không được kết nối khác, ít nhất là theo như tôi có thể nói.
Tôi đã thử đóng bản ghi âm sau khi tôi đã điền hai Listbox1 (không có hiệu lực). Tôi đã thử chọn một mục mặc định trong CTOverview.Listbox1 (không có hiệu lực).
Chỉ trong trường hợp vấn đề, đây là mã của tôi để mở/đóng recordset:
Public Sub OpenDB()
If cnn.State = adStateOpen Then cnn.Close
cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}; _
DBQ=" & ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name
cnn.Open
End Sub
Public Sub closeRS()
If rs.State = adStateOpen Then rs.Close
rs.CursorLocation = adUseClient
End Sub
Theo như tôi có thể nói, tôi phải mất tập trung off của bảng CTOverview. Nếu tôi nhấp vào bất kỳ trang tính nào khác, hãy nhấp lại vào CTOverview, Listbox1 dường như hoạt động. Đây là một vấn đề vì CTOverview được cho là tờ khai của tôi.
Bất kỳ ý tưởng nào tại sao điều này có thể xảy ra? Tôi đang kéo tóc ra để cố gắng tìm ra điều này. Mọi thông tin chi tiết sẽ được đánh giá cao.
Bạn có đang điền vào hộp danh sách trong sự kiện worbook_open không? –
vâng, tôi. mã ở trên chạy trên mở. – user2296377
Hmmm, tôi nghĩ vậy. Tôi đã trả lời một câu hỏi tương tự (tôi không chắc là nó có ở SO hay một diễn đàn nào khác). Tôi thậm chí không nhớ những gì tôi đề nghị nhưng nó làm việc .... Chết tiệt! Dù sao đi nữa. Bạn có thể thử điều này cho tôi không. Sau khi bạn đã điền vào hộp danh sách, ngay tại cuối (ngay trước khi kết thúc phụ) kích hoạt sheet2 và trong dòng tiếp theo kích hoạt bảng khởi chạy. Sử dụng 'Application.Screenupdating = false' để đảm bảo rằng không có màn hình nhấp nháy. Bây giờ thử nghiệm nó. –