私は奇妙な状況を把握しようとしています。ExcelでActiveXのリストボックスが有効になっていません
私は多くのシートを持つワークブックを持っています。 1枚のシートには、1つのActiveXリストボックス(CTOverview.Listbox1)があります。 2番目のシートには、合計3つのリストボックス(CTSelected.Listbox1〜Listbox3)があります。私は両方のシート上のListbox1に同じデータを入力するクエリを使用しています。このためのコードは以下の通りです:
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
このコードは美しく動作します(ない私のコード - 私はintertubesからそれを得ました)。両方のシート上の両方のLIstbox1は、異なる領域のリストをロードする。しかし、CTSelected.Listbox1から何かを選択するまでは、CTOverview.Listbox1はどの入力にも応答することができません。私がそれをしたら、リストボックス1の仕事は正常であり、少なくとも私が知る限り、それ以外の場合は接続されていません。
私は2つのリストボックス1(効果なし)を設定した後、レコードセットを閉じようとしました。 CTOverview.Listbox1でデフォルトの項目を選択しようとしました(効果なし)。
ちょうどそれが重要な場合は、ここでは、レコードセットを閉じる/開くために私のコードは次のとおりです。私の知る限り
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
、私はCTOverviewシートのオフに焦点を取らなければなりません。他のシートをクリックしてCTOverviewに戻ると、Listbox1が動作するようです。これは、CTOverviewが私の打ち上げシートであるはずなので、問題です。
これはなぜ起こっているのでしょうか?私はこれを理解しようとしている私の髪を引き出しています。どんな洞察も高く評価されるだろう。
あなたはworbook_openイベントでリストボックスを設定していますか? –
はい、私です。上のコードはopenで実行されます。 – user2296377
うん、そう思った。私は似たような質問に答えました(私はそれが他のフォーラムにあったかどうか分かりません)。私は私が示唆したことを覚えていないが、それは働いた....くそー!いずれかの方法。あなたは私のためにこれを試すことができますか?リストボックスにデータを入力したら、最後(直前のサブ)シート2をアクティブにし、次の行でラウンチシートをアクティブにします。 'Application.Screenupdating = false'を使って画面のちらつきがないことを確認してください。今それをテストしてください。 –