Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Excel VBA中的SQL记录集填充多列列表框_Sql_Excel_Vba - Fatal编程技术网

用Excel VBA中的SQL记录集填充多列列表框

用Excel VBA中的SQL记录集填充多列列表框,sql,excel,vba,Sql,Excel,Vba,我有一个userform,它包含一个有5列的列表框。单击搜索按钮时,我希望列表框中填充来自SQL表的搜索结果 当我使用rs时,我不断得到“类型声明字符与声明的数据类型不匹配!”!对于.RowSource 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

我有一个userform,它包含一个有5列的列表框。单击搜索按钮时,我希望列表框中填充来自SQL表的搜索结果

当我使用rs时,我不断得到“类型声明字符与声明的数据类型不匹配!”!对于.RowSource

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] Where [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 & "' or [location] = '" & SearchForm.Location.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
.Top = 252
.Left = 36
.Width = 573
.Height = 188.3
.ColumnHeads = True
.ColumnCount = 5
.ColumnWidths = "100;100;100;100;100;"
.MultiSelect = fmMultiSelectExtended
.RowSource = rs!
End With
rs.Close
Cn.Close
Set rs = Nothing
Set Cn = Nothing

End Sub

您可以获取数组中的记录集,然后像这样填充列表框。而且,由于您是动态填充列表框,因此标题在这里不起作用,但是如果对您有效的话,您可以在列表框的正上方添加带有标题的标签

Dim arr
arr = rs.GetRows
.List = arr

这就是我如何从工作表加载多列列表框的方法。我确信它可以通过阵列来实现,但您需要5个阵列,或者一个多维阵列

与我在一起。ListBox2
.Clear“清除”以设置列表
.ColumnCount=4
.ColumnWidths=“60;70;65;150”
对于i=0到最后一行-2'数据从第2行开始
如果LastRow>=2,则
.AddItem
.List(i,0)=ID的DATAsheet.Cells(i+2,1)列,数据从第2行开始
.List(i,1)=数据表.单元格(i+2,4)”列的日期,数据从第2行开始
.List(i,2)=数据表。电机尺寸的单元格(i+2,2)列,数据从第2行开始
.List(i,3)=电机序号的数据表单元格(i+2,3)列,数据从第2行开始
其他人什么也不做
如果结束
接下来我
以

excel列表框需要的是单元格范围,而不是记录列表。我举了一个例子,如果您想查看Access数据库,可以从中执行相同的操作。当然,任何操作都会有帮助。总是很难从代码中提取片段,@sktneer在这种方法中是正确的,我还尝试展示两种方法1).addItem和2)将rowSource分配到一个范围。我试图提供上下文,否则如果不共享所有内容,编写成可读的代码就毫无意义。我应该在代码中放在哪里?我已经把它放在了我认为应该放的地方,但是我得到了需要对象的错误。替换行
。RowSource=rs与建议的三行。这非常有效。我只需要弄清楚如何让结果显示在五列而不是一列