【问题标题】:Copy recordset data into multiple sheets to avoid problem of maximum rows limit in Excel VBA将记录集数据复制到多个工作表中以避免 Excel VBA 中的最大行数限制问题
【发布时间】:2010-04-22 23:48:49
【问题描述】:

我正在 Excel/vba 2003 中开发报告应用程序。VBA 代码将搜索查询发送到数据库并通过记录集获取数据。然后它将被复制到一张excel表中。检索到的数据如下图所示。

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 中实现这一点?

如果不可能,有没有替代方案?

提前致谢!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    由于您没有提供有关如何访问数据库的任何代码,我只能给您一个大致的概述。

    首先,像这样向数据库发送查询:

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

    从结果中您可以轻松计算出少于 65536 条记录的 ProductID 间隔,只需将计数相加直到达到此限制。

    最后,您将原始查询拆分为多个查询(每个数据表一个),并添加如下 WHERE 条件:

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

    LowerIdRange 和 HigherIDRange 必须是从第一个查询计算的区间限制。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多