2010-04-19 177 views
3

我正在开发Excel/vba 2003中的报表应用程序.VBA代码将搜索查询发送到数据库并通过记录集获取数据。然后它将被复制到Excel表单中。检索到的数据如下所示。将记录集数据复制到多个表中以避免Excel VBA中的最大行数限制问题

ProductID--------|---DateProcessed---------|----State----- 

1................|.. 1/1/2010..............|.....Picked Up 
1................|.. 1/1/2010..............|.....Forward To Approver 
1................|.. 1/2/2010..............|.....Approver Picked Up    
1................|.. 1/3/2010..............|.....Approval Completed  
2................|.. 1/1/2010..............|.....Picked Up 
3................|.. 1/2/2010..............|.....Picked Up 
3................|.. 1/2/2010..............|.....Forward To Approver 

问题是从搜索查询中检索的数据非常巨大,超出了excel行限制(excel 2003中的65536行)。所以我想将这些数据分成两张Excel表格。 在分割数据时,我想确保同一产品的数据应该保留在一张纸上。

例如,如果上述结果集中的最后一条记录是第65537条记录,那么我也希望将产品3的所有记录移动到新工作表中。

所以Sheet1中会包含产品ID 1和2条记录与总记录数= 65534 表2将包含产品ID 3记录 - 总记录= 2

我如何在VBA实现这一目标?

如果这是不可能的,是否有其他解决方案?

在此先感谢!

回答

1

既然你没有提供任何关于你如何访问你的数据库的代码,我只能给你一个大纲。

首先,将查询发送到这样的数据库:

"SELECT COUNT(*),ProductID FROM YourTable GROUP BY ProductID order by ProductID" 

从结果可以方便地计算产品ID的间隔小于65536分的记录,只需添加计数,直到达到此限制。

最后,分割原始查询成许多查询(每数据片的一个),并添加一个WHERE条件是这样的:

... WHERE ProductID IS BETWEEN " + LowerIDRange + " AND " + HigherIDRange 

LowerIdRange和HigherIDRange必须是从所述第一查询中计算出的间隔的限制。

0

移动到Excel 2007或2010,我认为它有250.000行的限制。或者更好:看看你能否预先汇总你的数据。
我最喜欢的建议是制作数据透视表来总结您的数据。然后通过双击一个单元格,用户可以将一个匹配的细节记录子集合到一个新的表格中。