微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Excel中过滤和排序ADO Recordset引发错误

如何解决在Excel中过滤和排序ADO Recordset引发错误

我有一个包含多张工作表的Excel工作簿,并将所有数据提取一个2D数组中。我想让用户在GUI(用户窗体)中查看数据,但为了简化过滤和排序,我想将数据放入ADO记录集中。为了避免处理连接,我使用与here类似的方法将数组读入记录集。似乎可行:我可以获取字段名称,也可以将记录集“转储”到Excel工作表中。

但是,当我尝试过滤记录集时出现错误运行时错误'-2147217825(80040e5f)'过滤器无法打开。

如果我尝试排序,则会收到类似的错误运行时错误'-2147217824(80040e60)'无法应用排序顺序。'

这是有问题的代码

Dim Arr()
Dim rsADO As ADODB.Recordset,lngR As Long,lngC As Long
'this gives a 2d array (it happens to be about 300 rows and 20 columns); first row = column headers:
Arr = Sheet1.UsedRange
'Note:  in real life my array pulls info from several different sheets


Set rsADO = New ADODB.Recordset
'Set up recordset fields from 1st row in array
For lngC = 1 To UBound(Arr,2)
    rsADO.Fields.Append Arr(1,lngC),adVariant
Next lngC

'read array values into recordset:
rsADO.Open
For lngR = 1 To UBound(Arr,1)
    rsADO.AddNew
    For lngC = 1 To UBound(Arr,2)
        rsADO.Fields(lngC - 1).Value = Arr(lngR,lngC)
    Next lngC
    rsADO.MoveNext
Next lngR
rsADO.MoveFirst

MsgBox rsADO.RecordCount,rsADO.Fields(0).Name 'Seems to work fine
Sheet7.Cells.Clear
Sheet7.Range("A1").copyFromrecordset rsADO 'works fine too

rsADO.sort = "Country"  'throws error as above
rsADO.filter = "Country = 'JAPAN'" 'throws error as above

我很困惑,因为如果我将Excel工作表范围直接读入ADO记录集(使用描述为here方法),则可以进行筛选和排序。但是我更喜欢通过数组,因为在将数据放入记录集之前,我会从做各种事情的各种工作表中提取信息。 (我想我可以将数组读取到工作表中,然后使用第二种方法将数据拉入记录集...但这似乎是不必要的步骤。)

不确定这是否重要,但是在源工作表中,尽管Excel正确解释了日期并以“日期”格式存储,但Excel单元格格式大多为“常规”格式。

关于如何获取过滤器和进行排序的任何想法?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。