在多列列表框中水平显示SQL查询的结果

时间:2018-06-27 14:34:04

标签: sql excel vba

我有一个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

1 个答案:

答案 0 :(得分:1)

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

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

.list =  Application.Transpose(arr)