Excel 用ADODB记录集填充组合框

Excel 用ADODB记录集填充组合框,excel,vba,adodb,recordset,Excel,Vba,Adodb,Recordset,我想使用ADODB从Excel Vba查询数据库,并用检索到的值列表填充一个组合框。不幸的是,下拉字段中只显示返回列表的最后一个值。我假设记录集是所有返回行的完整字符串,因此只有最后一行可见 我搜索了这个主题,但只能找到关于访问的信息,这似乎没有帮助 这应该是代码的重要部分,如果需要,我可以提供更多: '-- Create database query SQLStatement = "SELECT Project_Name FROM ressourceplanning.projects" '-

我想使用ADODB从Excel Vba查询数据库,并用检索到的值列表填充一个组合框。不幸的是,下拉字段中只显示返回列表的最后一个值。我假设记录集是所有返回行的完整字符串,因此只有最后一行可见

我搜索了这个主题,但只能找到关于访问的信息,这似乎没有帮助

这应该是代码的重要部分,如果需要,我可以提供更多:

'-- Create database query
SQLStatement = "SELECT Project_Name FROM ressourceplanning.projects"

'-- Execute query
Recordset.Open SQLStatement, Connection

'-- Write report into combobox (dropdown)
RecordsetArray = Recordset.GetRows
UF_Delete_Project.Cb_DeleteProject.List = RecordsetArray
'UF_Delete_Project.Cb_DeleteProject.RowSourceType = RecordsetArray
最后一行在使用时导致umatching types错误13。但使用RowSourceType是迄今为止我找到的最佳答案

记录集包含正确的值,因此数据库连接和查询本身是有效的,这与记录集的填充有关

这里的代码为我提供了窍门:

RecordsetArray = Recordset.GetRows

For i = LBound(RecordsetArray, 2) To UBound(RecordsetArray, 2)
    UF_Delete_Project.Cb_DeleteProject.AddItem RecordsetArray(0, i)
Next i
由于@braX和@FunThomas

命令Recordset.GetRows以二维数组的形式返回数据,但是,它以错误的维度顺序返回数据:第一个维度是FieldIndex,第二个维度是RowIndex

RecordsetArray0,0给出第一行的第一个字段,RecordsetArray1,0给出第一行的第二个字段,而RecordsetArray0,1给出第二行的第一个字段

comboBox的List属性要求数据为二维数组,但如果行作为第一个索引,字段作为第二个索引,则可以在comboBox中显示多个列。因此,您需要做的是转置数组:

UF_Delete_Project.Cb_DeleteProject.List = Application.WorksheetFunction.Transpose(pRecordsetArray)

但是,转置方法有一些限制字段的数量,字符串的最大长度,不能处理空值,因此如果遇到运行时错误13类型不匹配,按照braX在评论中的建议,循环记录集或数组可能更容易。

您是否尝试过循环记录集并使用组合框的.AddItem方法?不是,.AddItem仅限于10个条目?否。。。你在哪里读到的?卡在我的电脑后面。不过我当然会试试。非常感谢: