2013-08-21 7 views
0

Помощь! У меня есть база данных, которую я использую, чтобы открыть шаблон Excel, экспортировать результаты QueryDef в рабочий лист acitve, а затем сохранить этот файл с новым именем файла. Звучит достаточно просто. Проблема, с которой я сталкиваюсь, заключается в получении результатов для экспорта в активный рабочий лист с помощью DoCmd.TransferSpreadsheet. Он делает все, в чем я нуждаюсь, кроме фактической передачи данных ... Это означает, что это почти бесполезно. Любая помощь была бы высоко оценена. Я собираюсь вытащить волосы. Заранее спасибо.Экспорт результатов Querydef в рабочий лист Excel

Создание ФРК

Set qdf = db.CreateQueryDef("" & strCrt, "SELECT [Zones Asset Information].* FROM " & _ 
"[Zones Asset Information] WHERE [Zones Asset Informaiton].[Invoice Number] " = '" & strCrt & "';") 

Открытие шаблона

Set xlWB = xlApp.Workbooks.Open(WB_PATH) 
    Set xlWS = xlWB.Sheets(3) 
    xlWS.Activate 

Попытка Экспорт

DoCmd.TransferSpreadsheet acExport, 10, "" & strCrt, , True, "orig data" 'Don't know how to specify Active Worksheet instead of a filename?!? 
    DoCmd.DeleteObject acQuery, "" & strCrt 

Сохранение файла

sSaveAsFileName = FLDR_PATH & "Accounting_Breakdown_Zones_Invoice_xxxxxx.xlsx" 
    Debug.Print "sSaveAsFileName: " & sSaveAsFileName 
    xlWB.SaveAs sSaveAsFileName 

ответ

1

Есть два способа экспорта данных из Access в Excel:

  1. Открытие объекта MSExcel и используя свои методы, чтобы манипулировать Excel
  2. Экспорт данных с использованием TransferSpreadsheet метода

Вы делаете сочетание обоих, поэтому вы не получаете результат.

TransferSpreadsheet экспортирует данный запрос в указанный файл, но вы не можете указать рабочий лист.

Если спецификация рабочего листа важна, вам нужно будет сделать это с помощью объекта Excel и отправить информационную ячейку по ячейке, гораздо больше работы, если это оправдывает причину.

0

E Mett, Спасибо за руководство. Если бы переработать процесс, который не согласен на 100% с заголовком сообщения, но думал, что я поделюсь на тот случай, если кому-то понадобится нечто подобное. Еще раз спасибо!!

Private Sub ExportTable_MultipleWB() 
Dim db As DAO.Database, rs As DAO.Recordset, rs2 As DAO.Recordset, strFilter As String, strFilter2 As String, _ 
    sSaveAsFileName As String 

Dim xlApp As Excel.Application, xlWB As Excel.Workbook, xlWS As Excel.Worksheet 
Dim bolIsExcelRunning As Boolean 

Set db = CurrentDb 
Set rs = db.OpenRecordset("SELECT DISTINCT [mytable].[PO Number], [mytable].[Invoice Number] " & _ 
            "FROM [mytable] ORDER BY [mytable].[PO Number], [mytable].[Invoice Number];", dbOpenSnapshot) 

rs.MoveFirst 

Do While Not rs.EOF 

strFilter = rs.Fields(1).Value 
strFilter2 = rs.Fields(0).Value 

Set rs2 = db.OpenRecordset("SELECT [mytable].* FROM [mytable] WHERE [mytable].[Invoice Number] = '" & strFilter & "';") 

On Error Resume Next 

Set xlApp = GetObject(, "Excel.Application") 

If Err.Number <> 0 Then 
    Set xlApp = CreateObject("Excel.Application") 
Else 
    bolIsExcelRunning = True 
End If 

xlApp.Visible = True 

Set xlWB = xlApp.Workbooks.Open(WB_PATH) 
Set xlWS = xlWB.Sheets(3) 

xlWS.Activate 

With xlWS 

For iCols = 0 To rs2.Fields.Count - 1 
    xlWS.Cells(1, iCols + 1).Value = rs2.Fields(iCols).Name 
Next 
    xlWS.Range(xlWS.Cells(1, 1), _ 
    xlWS.Cells(1, rs2.Fields.Count)).Font.Bold = True 
    xlWS.Range("A2").CopyFromRecordset rs2 
End With 

sSaveAsFileName = FLDR_PATH & "myfilename_" & strFilter & "_PO-" & strFilter2 & ".xlsx" 
    Debug.Print "sSaveAsFileName: " & sSaveAsFileName 

xlWB.SaveAs sSaveAsFileName 
Set xlWS = Nothing 

xlWB.Close False 
Set xlWB = Nothing 

rs.MoveNext 

Loop 

rs.Close 
rs2.Close 

If Not bolIsExcelRunning Then 
xlApp.Quit 
End If 

Set xlApp = Nothing 

Set rs = Nothing 
Set rs2 = Nothing 

Set db = Nothing 

End Sub

Смежные вопросы