2014-10-13 3 views
-1

Я пытаюсь заставить этот код работать около 5 часов без прогресса. Мой код нацелен на то, чтобы разбить большую таблицу на несколько меньших таблиц и экспортировать их в excel (фактические таблицы превысят 1000000 записей). Код продолжает выдавать ошибку 3011, заявляя, что не может найти объект 'tmpdata1' в команде transferpreadsheet. Текущий код выглядит следующим образом:Ошибка 3011 - Таблица переноса в Excel Workbook

ПРИМЕЧАНИЕ. DTable - это существующая таблица в базе данных и определена ранее в кодировке как общедоступная строка.

Private Sub Export_over_Multiple_Sheets_Click() 

Dim rs As New ADODB.Recordset 
Dim cn As New ADODB.Connection 
Set cn = CurrentProject.Connection 
Dim rowcount As Long 
Dim tblcount As Integer 
Dim i As Integer 
Dim t As TableDef 
Dim tblx As String 

Dim dbsDatas As DAO.Database 
Set dbsDatas = CurrentDb 

dbsDatas.TableDefs.Refresh 

Dim strWorksheetPathTable As String 
Dim xlApp As Object 
Dim xlWB As Object 

'----Set File Path 
strWorksheetPathTable = "O:\Data\Downstream POC\DWN Data Mgmt\Reports\" 
strWorksheetPathTable = strWorksheetPathTable & "" & DTable & "\" & DTable & ".xlsb" 

Set xlApp = CreateObject("Excel.Application") 
Set xlWB = xlApp.Workbooks.Open("" & strWorksheetPathTable & "") 

SQL = "SELECT * INTO tmpdata FROM " & DTable & "" 
DoCmd.RunSQL SQL 
SQL = "ALTER TABLE tmpdata ADD COLUMN id COUNTER" 
DoCmd.RunSQL SQL 
SQL = "SELECT count(*) as rowcount from " & DTable & "" 
rs.Open SQL, cn 
rowcount = rs!rowcount 
rs.Close 
tblcount = rowcount/50000 + 1 
For i = 1 To tblcount 
SQL = "SELECT * into tmpdata" & i & " FROM tmpdata" & _ 
" WHERE id<=50000*" & i 
DoCmd.RunSQL SQL 
SQL = "DELETE * FROM tmpdata" & _ 
" WHERE id<=50000*" & i 
DoCmd.RunSQL SQL 

dbsDatas.TableDefs.Refresh 
Set t = Nothing 
Set t = dbsDatas.TableDefs("tmpdata" & i & "") 

tblx = "tmpdata" & i & "" 

DoCmd.TransferSpreadsheet transfertype:=acExport, _ 
    spreadsheettype:=acSpreadsheetTypeExcel12, _ 
    TableName:=tblx, FileName:=strWorksheetPathTable, _ 
    hasfieldnames:=True 

Next i 

xlWB.Save 
xlWB.Close 

End Sub 

Я понимаю, что кодирование может быть немного грязный, я только учил себя VBA в течение нескольких месяцев до сих пор. Любая помощь будет принята с благодарностью.

Dane I

ответ

0

Понял. Некоторые из старых переменных, которые больше не используются моим кодированием (t, xlApp, xlWB), не соответствуют действительности. Удаление из кода исправило проблему.