Excel 如何使用Access和VBA恢复要在ListView上使用的查询数据

Excel 如何使用Access和VBA恢复要在ListView上使用的查询数据,excel,ms-access,vba,Excel,Ms Access,Vba,我正在对Access进行查询,我希望使用.EOF和.MoveNext恢复此查询的数据,以将其放在列表视图中,但我的查询的记录计数(a变量)等于-1。我该怎么做 Public Function ConsultaTabela_3(可选ByVal planilha作为字符串,可选ByVal Consulta作为字符串,可选ByVal linha作为字符串,可选ByVal coluna作为字符串,可选ByVal prm1作为字符串,可选ByVal prm2作为字符串,可选ByVal prm3作为字符串,

我正在对Access进行查询,我希望使用
.EOF
.MoveNext
恢复此查询的数据,以将其放在列表视图中,但我的查询的
记录计数(a变量)等于-1。我该怎么做

Public Function ConsultaTabela_3(可选ByVal planilha作为字符串,可选ByVal Consulta作为字符串,可选ByVal linha作为字符串,可选ByVal coluna作为字符串,可选ByVal prm1作为字符串,可选ByVal prm2作为字符串,可选ByVal prm3作为字符串,可选ByVal prm4作为字符串,可选ByVal prm5作为字符串,可选ByVal prm6作为字符串)
将sSQL设置为字符串
Dim banco作为ADODB.连接
将选项卡调整为ADODB.Recordset
Dim查询为ADODB.Command
将参数1、参数2、参数3、参数4、参数5、参数6设置为ADODB.参数
“Dim CaminoDB作为字符串
caminhoDB=thishworkbook.Path&“\”和“CALCULO\u SLA.accdb”
关于错误GoTo Rataerro
“caminhdb=Replace(thishworkbook.FullName,“MEDICAO\u alimentaco.xlsm”和“MEDICAO\u alimentaco.accdb”
Set banco=New ADODB.Connection
banco.Open“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“&caminhoDB&”Persist Security Info=False”
'a查询访问权限
Set query=New ADODB.Command
Set query.ActiveConnection=banco
query.CommandText=Consulta
query.CommandType=adCmdStoredProc
“Pego o valor do param.e adiciono没有命令
Set parametro1=query.CreateParameter(“prm1”,adChar,adParamInput,255)
query.Parameters.Append参数1
如果prm1=“”,则
parametro1.Value=Null
其他的
参数1.值=prm1
如果结束
Set parametro2=query.CreateParameter(“prm2”,adChar,adParamInput,255)
query.Parameters.Append参数2
如果prm2=“”,则
parametro2.Value=Null
其他的
参数2.值=prm2
如果结束
Set parametro3=query.CreateParameter(“prm3”,adChar,adParamInput,255)
query.Parameters.Append参数3
如果prm3=“”,则
parametro3.Value=Null
其他的
参数3.值=prm3
如果结束
Set parametro4=query.CreateParameter(“prm4”,adChar,adParamInput,255)
query.Parameters.Append参数4
如果prm4=“”,则
parametro4.Value=Null
其他的
参数4.值=prm4
如果结束
Set parametro5=query.CreateParameter(“prm5”,adChar,adParamInput,255)
query.Parameters.Append参数5
如果prm5=“”,则
parametro5.Value=Null
其他的
参数5.值=prm5
如果结束
Set parametro6=query.CreateParameter(“prm6”,adChar,adParamInput,255)
query.Parameters.Append参数6
如果prm6=“”,则
parametro6.Value=Null
其他的
参数6.值=prm6
如果结束
'执行一个没有访问权限的查询
执行
“Retrona a a query para a tabela temporária e cola no excel
Set tabela=New ADODB.Recordset
tabela.openquery
a=tabela.RecordCount
ActiveWorkbook.Sheets(planilha).Cells(CInt(linha),CInt(coluna)).CopyFromRecordset选项卡
“Limpando memória
塔贝拉,关上
Set tabela=无
银行关门
Set banco=无
退出功能
塔塔罗:
MsgBox(“错误:&错误说明)
端函数

在访问所有记录之前,RecordCount属性通常不可用

尝试:


您确认,在打开记录集之前,使用
adUseClient
进行
CursorLocation
可以获得有效的
RecordCount
(而不是-1)

Set tabela=New ADODB.Recordset

tabela.CursorLocation=adUseClient'如果你在
tabela.CursorLocation=adUseClient
之间插入
tabela.CursorLocation=adUseClient
设置tabela=New ADODB.Recordset
tabela.Open
,你会得到正确的
tabela.RecordCount
吗?完美的HansUp,它工作得非常完美!但是你能解释一下这行是什么意思吗?因为我没有取消了解它!谢谢!在试验可用选项时,我发现
CursorLocation=adUseClient
可以给我一个有效的
Recordset
,在某些情况下
Recordset
会报告-1,而没有
CursorLocation
。但我只能说这些;我不经常使用ADO。它不起作用,返回一个eRor说“这捆线不支持回归搜索”。。。
 tabela.MoveLast
 tabela.MoveFirst
 a = tabela.RecordCount