打开文件时未启用Excel ActiveX列表框

use*_*377 12 vba activex excel-vba activexobject excel-2010

我想弄清楚一个奇怪的情况.

我有一张有很多床单的工作簿.在一张纸上,我有一个ActiveX列表框(CTOverview.Listbox1).在第二张纸上,我总共有三个列表框(CTSelected.Listbox1到列表框3).我正在使用查询在两个工作表上填充具有相同数据的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
Run Code Online (Sandbox Code Playgroud)

这段代码很漂亮(不是我的代码 - 我从intertubes得到它).两张纸上的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
Run Code Online (Sandbox Code Playgroud)

据我所知,我必须关注CTOverview表.如果我点击任何其他工作表,然后单击返回CTOverview,Listbox1似乎工作.这是一个问题,因为CTOverview应该是我的启动表.

知道为什么会这样吗?我拔出我的头发试图解决这个问题.任何见解都将非常感激.

Mic*_*ael 1

Siddharth Rout 在评论中给出了答案。填充列表框后,在末尾(就在 end sub 之前)激活sheet2,并在下一行激活启动表。使用Application.Screenupdating =false以确保没有屏幕闪烁。