【发布时间】:2020-07-14 05:27:22
【问题描述】:
我有一个与slow exporting from access to excel 类似的性能问题,通过设置单个单元格值循环将数据导出到 MS Excel:
objSheet.Cells(table_1_row_no + intcounter, table_1_colA_col_no) = table_1_array(intcounter, 0)
但是我的数据来自一个数组,并且需要在将其传输到那里后在 excel 中进行处理,因此我需要在传输数据后使用一个打开的工作表。因此,上述帖子中提到的方法都不是非常合适的。
我有一个从数据库中提取数据的 MS 访问应用程序,在将 vba 中的数据放入 Excel 之前,它会对其进行相当多的处理。因此,要传输的数据是数组而不是记录集。将其返回到记录集以允许使用 .CopyFromRecordset 方法的最简单方法是创建一个临时表和记录集,但除非没有更好的办法,否则这会导致一条相当长的路径。
在 Access 取回结果之前,电子表格会进行冗长的计算。我很想把它留在 excel 中,因为这让工程师可以灵活地使用它来根据不同情况进行调整(环境受到控制,因此无需担心未经授权的更改)。因此,仅删除 csv 或 excel 文件而不打开它的选项也不适合。
非常感谢任何建议。
【问题讨论】:
-
你为什么有一个数组?为什么不首先将数据构建到记录集中?
-
创建一个包含您要传输的值的新二维数组,然后通过一次操作将该数组复制到工作表中。
objSheet.Cells(table_1_row_no, table_1_colA_col_no).resize(numRows,1).Value = yourArrayHere -
二维数组提供了一种快速提高性能的方法 - 感谢 Tim。
-
对于某些数组,数据可以很容易地来自记录集。对于其他人来说,在从数据库中提取后,在 vba 中有很多处理来计算相关数字,而对于其他人来说,数据由一个来源的数字和另一个来源的数字等组成。因此,有几种情况不适合基于表或查询创建记录集。
标签: excel vba ms-access export-to-excel