我正在试图找出一个奇怪的情况。
我有一本有很多张的工作簿。在一张纸上,我有一个 ActiveX 列表框 (CTOverview.Listbox1)。在第二张纸上,我总共有三个列表框(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
这段代码工作得很好(不是我的代码 - 我从管间得到它)。两张纸上的两个 LIstbox1 都加载了不同区域的列表。但是,在我从 CTSelected.Listbox1 中选择某些内容之前,我无法让 CTOverview.Listbox1 响应任何输入。一旦我这样做了,两个 Listbox1 都正常工作并且没有以其他方式连接,至少据我所知。
在填充两个 Listbox1 后,我尝试关闭记录集(没有效果)。
我尝试在 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 应该是我的启动表。
知道为什么会发生这种情况吗?我正在拔掉我的头发试图弄清楚这一点。任何见解将不胜感激。