【发布时间】:2017-06-27 11:14:56
【问题描述】:
我正在使用以下代码从数据库中获取记录。我有超过 5,000,000 条记录。下面的代码在 Sheet 2 中提取 1048576 条记录并粘贴。有人可以帮我循环它,以便它从 sheet1 中提取所有记录并将其放置在 sheet2 中而不是 sheet3 中,直到所有记录都被粘贴。
Dim objWkb As Excel.Workbook
Dim objSht As Excel.Worksheet
Dim db As Database
Dim rs As Recordset
Dim intLastCol As Integer
Const conMAX_ROWS = 20000
Const conSHT_NAME = "Sheet2"
Const conWKB_NAME = "\\workbook path\a\b\c\Work.xlsm"
Set db = CurrentDb
Set objXL = New Excel.Application
Set rs = db.OpenRecordset("Database", dbOpenSnapshot)
With objXL
.Visible = True
Set objWkb = .Workbooks.Open(conWKB_NAME)
On Error Resume Next
Set objSht = objWkb.Worksheets(conSHT_NAME)
If Not Err.Number = 0 Then
Set objSht = objWkb.Worksheets.Add
objSht.Name = conSHT_NAME
End If
Err.Clear
On Error GoTo 0
intLastCol = objSht.UsedRange.Columns.Count
With objSht
.Range(.Cells(1, 1), .Cells(conMAX_ROWS, _
intLastCol)).ClearContents
.Range(.Cells(1, 1), _
.Cells(1, rs.Fields.Count)).Font.Bold = True
.Range("A2").CopyFromRecordset rs
End With
End With
Set objSht = Nothing
Set objWkb = Nothing
Set objXL = Nothing
Set rs = Nothing
Set db = Nothing
End Sub
【问题讨论】:
-
为什么单个文件需要 5m 条记录?我猜该文件将需要 forever 来保存,并且需要更长的时间来加载(如果它加载的话)。 Excel 可能允许 100 万行,但它不是为滥用而设计的。
-
无论您认为在 Excel 中需要 500 万行的原因是什么,都是错误的。没有 Excel 工作表永远需要处理这么多数据。您将对其进行聚合、汇总、查找等 - 让 SQL 后端完成这项工作,并且只向 Excel 提供它需要的数据。这是一个明显的 X-Y 问题:您正在解决一个症状(太多数据无法适应工作表)而不是手头的实际问题(疯狂猜测,您正在制作一些报告),使 Excel 完成了数据库的工作。