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

标签 excel activex excel-2010 activexobject vba

我试图找出一个奇怪的情况。

我有一个包含许多工作表的工作簿。在一张纸上,我有一个 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

这段代码运行良好(不是我的代码——我是从 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

据我所知,我必须将注意力从 CTOverview 表上移开。如果我单击任何其他工作表,然后单击返回 CTOverview,Listbox1 似乎可以工作。这是一个问题,因为 CTOverview 应该是我的启动表。

知道为什么会发生这种情况吗?我正在拔头发试图弄清楚这一点。任何见解将不胜感激。

最佳答案

Siddharth Rout provided the answer in a comment .填充列表框后,在最后(就在 end sub 之前)激活 sheet2 并在下一行激活启动表。使用Application.Screenupdating =false以确保没有屏幕闪烁。

关于打开文件时未启用 Excel ActiveX 列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203277/

相关文章:

excel - PowerQuery:避免每次添加列时重新加载

excel - 创建至少包含不超过特定值的多个单元格的公式

excel-formula - Excel : formula to return a value based on another cells value

excel - 系统集合数组列表

vba - [AWorrkbookName] VBA 语法是新语法还是旧语法?

vba - 如何在 Excel VBA 函数中将日期作为参数传递

c++ - WM_TIMER 在 ATL ActiveX 控件中突然停止

javascript - 办公室名称控件 PresenceEnabled 始终为 false

javascript - 捕获 ActiveX 的完成安装事件

vba - Excel VBA 通配符搜索