Рассмотрите возможность назначения и освобождения одного и того же querydef внутри цикла, тем более что вы можете иметь сотни Chunk_i запросов. Нет необходимости Append
, Delete
или Refresh
.
В частности, заранее сохраните запрос с именем Chunk , например, SELECT 1 FROM MASTER
, затем обновите его SQL в коде, каждый раз выпуская:
ssql = "SELECT TOP 25000 * FROM MASTER"
Set qdef = CurrentDb.QueryDefs("Chunk") ' ASSIGN SAVED QUERY OBJECT
qdef.SQL = ssql ' UPDATE ITS SQL
Set qdef = Nothing ' RELEASE TO SAVE
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, _
"Chunk", "K:\Public\MDM\PMD\Chunk_1.xlsx"
For i = 2 To numChunks
ssql = "SELECT TOP 25000 * FROM MASTER WHERE [Material Number]" _
& " NOT IN (SELECT TOP " & (i - 1) * 25000 & " [Material Number] FROM MASTER)"
Set qdef = CurrentDb.QueryDefs("Chunk") ' ASSIGN SAVED QUERY OBJECT
qdef.SQL = ssql ' UPDATE ITS SQL
Set qdef = Nothing ' RELEASE TO SAVE
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, _
"Chunk", "K:\Public\MDM\PMD\Chunk_" & i & ".xlsx"
Next i