Garip bir durum anlamaya çalışıyorum.Excel ActiveX Listbox açık dosyada etkin değil
Çok sayfalı bir çalışma kitabım var. Bir sayfada, bir ActiveX liste kutum var (CTOverview.Listbox1). İkinci bir sayfada toplam üç liste kutusu var (CTSelected.Listbox1 thru Listbox3). Listbox1'i aynı verilerle her iki sayfada doldurmak için bir sorgu kullanıyorum. Bunun için kod aşağıda:
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
Bu kod güzel çalışıyor (benim kod - Ben intertubes aldım). Her iki sayfada da LIstbox1'ler, farklı bölgelerin listesiyle yüklenir. Ancak, CTSelected.Listbox1'den bir şey seçinceye kadar CTOverview.Listbox1'in herhangi bir girdiye yanıt veremiyorum. Bunu yaptıktan sonra, her iki Listbox1'in çalışması normal olarak çalışıyor ve en azından benim anlatabildiğim kadarıyla bağlı değil.
İki Listbox1'i (etki yok) yerleştirdikten sonra kayıt kümesini kapatmayı denedim. CTOverview.Listbox1'de bir varsayılan öğe seçmeyi denedim (etki yok). Ben söyleyebilirim, ben CTOverview sacın kapalı odaklanmak almak zorunda Bildiğim kadarıyla
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
: bu konularda olur ne olmaz
, burada recordset kapatmak/açmak için benim koddur. Başka bir sayfaya tıklarsam, daha sonra CTOverview'a geri dönün, Liste Kutusu1 çalışır gibi görünüyor. Bu bir problem çünkü CTOverview'in lansman sayfası olması gerekiyordu.
Bunun neden olabileceği hakkında bir fikriniz var mı? Bunu anlamaya çalışırken saçlarımı çekiyorum. Herhangi bir anlayış çok takdir edilecektir.
Liste kutusunu worbook_open etkinliğinde mi dolduruyorsunuz? –
evet, öyleyim. Yukarıdaki kod açık çalışır. – user2296377
Hmmm, öyle düşündüm. Benzer bir soruya cevap verdim (SO ya da başka bir forumda olup olmadığından emin değilim). Ne önerdiğimi bile hatırlamıyorum ama işe yaradı .... Lanet olsun! Neyse. Bunu benim için deneyebilir misin? Liste kutusunu dolduktan sonra, hemen sağa (hemen bitiş altından) sayfa2'yi etkinleştirin ve sonraki satırda başlatma sayfasını etkinleştirin. Ekran titremesi olmadığından emin olmak için 'Application.Screenupdating = false' kullanın. Şimdi test et. –