VBA 将Recordset对象转化为二维数组

获取了一个数据集 rs(没报错)
然后Dim data
然后出错的语句来了
data=rs.GetRows
报424错误 要求对象 请问怎么回事

第1个回答  2013-07-20

  有可能是你选取数据出错了吧!

  MsgBox my_data(1, 0)这样可以理解为选取第二个字段第一行的记录

  如果报错则证明是没有数据的

     

如图Excel表格得出每个名称出现的次数

  Sub My()
Dim Re As Object
Dim Content$, Arr
Set Re = CreateObject("Adodb.Recordset")
With Re
.Open "Select [名称],count([名称]) from [Sheet1$] group By [名称] ", "Driver=Microsoft Excel Driver (*.xls);DBQ=" & ThisWorkbook.FullName
Arr = Re.getrows
For j = 0 To UBound(Arr, 2)
For i = 0 To UBound(Arr)
Content = Content & Arr(i, j) & Chr(9)
Next
Content = Left(Content, Len(Content) - 1)
Content = Content & Chr(10)
Next
MsgBox "名称" & Chr(9) & "数量" & Chr(10) & Content
.Close
End With
End Sub

Access一样可以是这样用

追问

问题是我的数据集不只一条记录(输出记录集数都正确了) 但是用.getrows方法转换为数组就只剩一条记录
求大神指教 什么情况导致的异常

第2个回答  2013-07-19
Sub test()Dim shuzu(1 To 10, 1 To 10) As Stringshuzu(1, 1) = "aa"shuzu(1, 2) = "bb"shuzu(1, 3) = "cc"shuzu(156 4) = "dd"shuzu(2, 1) = "11"shuzu(2, 2) = "22"shuzu(2, 3) = "33"For i = 1 To 10MsgBox "行为" & i & "的列个数为" & Application.Match(""niz Application.Index(shuzuptx i, 0), 0) - 1Next    End Sub
第3个回答  2013-07-19
你将 data 声明为 Variant 试试
dim data as Variant追问

不行

追答

你多贴点代码看下,
因为 如果 rs 正确的话,是可以这么用的..

追问

Dim my_data As Variant
Set my_db = CurrentDb
Set my_tb = my_db.OpenRecordset("表1")
my_data = my_tb.GetRows
表结构是2个字段 两条记录
但是MsgBox my_data(0,1)或MsgBox my_data(1, 0)就会报下标超出界限的错
难道my_tb.GetRows方法只能读一条记录?

追答

有木有试过 检测一下 rs里面的东西 是什么?确定一下是 rs本身的问题,还是 getrows的问题,使用之前 最好 用下 rs.movefirst方法
你看看 my_data(0, 0) 对不对? 因为如果 getrows 没带参数的话,默认是取出所有记录的,你看下 之前有木有设置过什么
最后 我测试的是VB,不知道在VBA 中是否有不同? 不然 我也不知道哪里有问题了..

追问

测试过 rs完全没问题 my_data(0, 0)正确 没有设置多余的东西
它只取rs第一条记录啊 肿么回事啊

追答

不是吧,这么坑爹..^_^
要不试着 给 getrows 加些参数 试试..
其实,你完全可以把 rs 当成 二维数组来处理,到最后 再把 rs 资源 卸载掉就行了,不一定非要转
实在想转 又没好的方法,就用循环做吧

最后的最后 不行的话 ,等高手,或者 去CSDN 问下,盼牛B的大神..解决了的话顺便 告诉我一下

追问

我从ACESS里面将数填进EXCEl啊 一个一个写 程序会卡到泪奔的
加了参数 不行啊

本回答被提问者采纳
相似回答