我有一个大约有50000条记录的Access表,我需要将其分成3部分,并使用VBA将这些部分导出到单独的excel文件或工作表中。
我需要这样做,因为这些Excel文件用在其他地方,其中文件中的最大记录数只能是大约20000条记录。
我玩过docmd.transferspreadsheet方法,但似乎无法拆分它们。
任何想法或帮助表示赞赏。
编辑:我正在使用的这张表包括以下几列:零件编号(由各种不同的字符组成),描述,价格,注释。它没有与记录相关的ID号,例如1到50000。
试试这个:
Sub ExportChunks()
Dim rs As Recordset
Dim ssql As String
Dim maxnum As Long
Dim numChunks As Integer
Dim qdef As QueryDef
ssql = "SELECT COUNT(Id) FROM BigTable"
Set rs = CurrentDb.OpenRecordset(ssql)
maxnum = rs.Fields(0).Value 'total number of records
'add 0.5 so you always round up:
numChunks = Round((maxnum / 20000) + 0.5, 0)
On Error Resume Next 'don't break if Chunk_1 not yet in QueryDefs
ssql = "SELECT TOP 20000 * FROM BigTable"
CurrentDb.QueryDefs.Delete "Chunk"
Set qdef = New QueryDef
qdef.SQL = ssql
qdef.Name = "Chunk"
CurrentDb.QueryDefs.Append qdef
CurrentDb.QueryDefs.Refresh
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, "Chunk_1", "C:\00_Projekte_temp\Chunk_1.xlsx"
For i = 2 To numChunks
ssql = "SELECT TOP 20000 * FROM BigTable WHERE ID NOT IN (SELECT TOP " & (i - 1) * 20000 & " ID FROM BigTable)"
Set qdef = CurrentDb.QueryDefs("Chunk")
qdef.SQL = ssql
CurrentDb.QueryDefs.Refresh
Set qdef = CurrentDb.QueryDefs("Chunk_" & i)
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, qdef.Name, "C:\00_Projekte_temp\" & qdef.Name & ".xlsx"
Next i
End Sub
它有什么作用?首先,它计算您需要多少块,然后创建查询,该记录将获取前20,000条记录,然后获取下一条,依此类推,最后将每个分块查询导出到Excel文件。
编辑:修改为onyl创建一个查询,该查询在每次迭代中都会被覆盖并导出到新的Excel文件中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句