You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用VBA将MySQL指定库表名填充到用户窗体ComboBox

VBA用户窗体ComboBox填充MySQL表名解决方案

问题根因

  • rst.GetRows 返回的二维数组默认是列优先的存储顺序,格式为(列索引, 行索引),而VBA用户窗体的ComboBox.List属性要求输入行优先的数组,格式为(行索引, 列索引),直接赋值就会出现仅显示第一条数据的问题
  • 运行时错误91是对象变量未绑定,大概率是遍历记录集前没有判断记录集是否已初始化、是否存在返回数据,或者记录集指针已经移动到EOF位置

修复后可用代码

方法1:数组转置后直接赋值(执行效率更高)

Private Sub UserForm_Initialize()
    Dim strMysql As String
    Dim rst As New ADODB.Recordset ' 确保记录集对象正确初始化
    Dim arrTables As Variant
    
    Application.Run "Connect_to_SQL_DB.ConnectToDB"
    
    ' 更稳定的查询语句,替换DBname为实际数据库名
    strMysql = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'DBname' ORDER BY table_name;"
    ' 确保游标类型正确,已经修复RecordCount的话这部分你已经配置正确
    rst.Open strMysql, conn, adOpenKeyset, adLockReadOnly
    
    If Not (rst.EOF And rst.BOF) Then ' 有返回数据才操作
        arrTables = rst.GetRows
        ' 转置数组,适配ComboBox.List的格式要求
        Me.cboComboBox.List = WorksheetFunction.Transpose(arrTables)
    End If
    
    ' 释放资源,避免内存泄漏
    rst.Close
    Set rst = Nothing
    Set conn = Nothing
End Sub

方法2:循环AddItem(兼容性更强,适配低版本Excel)

Private Sub UserForm_Initialize()
    Dim strMysql As String
    Dim rst As New ADODB.Recordset
    
    Application.Run "Connect_to_SQL_DB.ConnectToDB"
    
    strMysql = "SELECT table_name FROM information_schema.tables WHERE table_schema = 'DBname' ORDER BY table_name;"
    rst.Open strMysql, conn, adOpenKeyset, adLockReadOnly
    
    If Not (rst.EOF And rst.BOF) Then
        rst.MoveFirst ' 指针移动到第一条记录
        Do While Not rst.EOF
            Me.cboComboBox.AddItem rst.Fields(0).Value
            rst.MoveNext
        Loop
    End If
    
    rst.Close
    Set rst = Nothing
    Set conn = Nothing
End Sub

注意事项

  • 如果使用Show Tables查询,返回的字段名是Tables_in_你的库名,取字段值的时候注意对应,更推荐使用information_schema查询语句,逻辑更清晰,也可以灵活过滤不需要的系统表
  • 执行查询前必须确保conn数据库连接对象已经正确初始化并连接成功

内容的提问来源于stack exchange,提问作者xvpnkr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:39:05