2013-04-24 28 views
12

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.

+0

Bạn có đang điền vào hộp danh sách trong sự kiện worbook_open không? –

+0

vâng, tôi. mã ở trên chạy trên mở. – user2296377

+14

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ó. –

Trả lời

0

Siddharth Rout provided the answer in a comment. 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.