首页 > 解决方案 > 在多列列表框中水平显示 SQL 查询的结果

问题描述

我有一个 SQL 查询,它从表中提取五列信息作为数组,然后将结果提供给我用 VBA 在 Excel 中编写的工具中的列表框。

现在它正在垂直显示结果,我需要它们水平显示。列表框中的一列应显示 SQL 表中的一列。列表框属性为其提供了五列等宽,我不确定为什么这不起作用。

Sub searchall()
Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim list As Object
Set list = SearchForm.Results
Server_Name = "SDL02-VM25"
Database_Name = "PIA"
SQLStr = "select [Agentname],[position],[employeegroup],[supervisor],[manager] from dbo.[HistoricalMasterStaffing] [FirstName] ='" & SearchForm.firstname.value & "' or [LastName] ='" & SearchForm.lastname.value & "' or [Date] = '" & SearchForm.DateSearch.value & "' or [year] = '" & SearchForm.Year.value & "' or [employeegroup] = '" & SearchForm.EmployGroup.value & "' or [position] = '" & SearchForm.Position.value & "' or [ftpt] = '" & SearchForm.PTFT.value & "' or [Contractagency] = '" & SearchForm.Agency.value & "' or [termcode] = '" & SearchForm.TermCode.value & "'
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & vbNullString
rs.Open SQLStr, Cn, adOpenStatic
With list
Dim arr()
arr() = rs.GetRows
.list = arr()
End With
rs.Close
Cn.Close
Set rs = Nothing
Set Cn = Nothing

End Sub

标签: sqlexcelvba

解决方案


rs.GetRows返回二维数组中的数据,第一个索引是字段(列),第二个索引是行。期望数据为二维数组,但第一个索引为行,第二个为列
listbox.list

所以你所要做的就是转置数据:

.list =  Application.Transpose(arr)

推荐阅读