MartyConnelly
martyconnelly at shaw.ca
Mon Aug 29 18:51:23 CDT 2005
There are limits on Excel 65K rows 32K per cell varies with version of Excel There is also something about memo fields being truncated at 255 chars but there is a workaround. If the worksheet aleady exists needs terminating "$" in name Here are a couple of samples methods using ADO. '? CopyTableToExcel("Products", "C:\Excel\Product2.xls", "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb") Public Function CopyTableToExcel(strTable As String, strXLSFile As String, strAccessFile As String) Dim cnSrc As New ADODB.Connection Dim num_copied As Long DoEvents strAccessFile = CurrentDb.Name cnSrc.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strAccessFile & ";" 'pick a sheetname "Books" cnSrc.Execute "SELECT * INTO [Excel 8.0;" & _ "Database=" & strXLSFile & "].[Books] FROM " & _ strTable, num_copied cnSrc.Close MsgBox "Copied " & num_copied & " records." End Function ' Open the database and build the Recordset containing the data 'you want to transfer. Then open the Excel workbook, 'find the worksheet that should contain the data, 'create a Range on the worksheet, 'and use its CopyFromRecordset method to load the data. 'This example also calls AutoFit to make the column widths fit the data. Function CopyTableToExcelCreate(strTable As String, strXLSFilename As String) Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim excel_app As Excel.Application Dim excel_sheet As Excel.Worksheet DoEvents ' Open the Access database. Set conn = New ADODB.Connection conn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strXLSFilename conn.Open ' Select the Access data. Set rs = conn.Execute(strTable) ' Create the Excel application. Set excel_app = CreateObject("Excel.Application") ' Uncomment this line to make Excel visible. ' excel_app.Visible = True ' Open the Excel workbook. excel_app.Workbooks.Open strXLSFilename ' Check for later versions. If Val(excel_app.Application.Version) >= 8 Then Set excel_sheet = excel_app.ActiveSheet Else Set excel_sheet = excel_app End If ' Use the Recordset to fill the table. excel_sheet.Cells.CopyFromRecordset rs excel_sheet.Cells.Columns.AutoFit ' Save the workbook. excel_app.ActiveWorkbook.Save ' Shut down. excel_app.Quit rs.Close conn.Close MsgBox "Ok" End Function Stephen Bond wrote: >In A2K I have built a temp table and am trying to then export it to a spreadsheet using the following line of code: > > objXLRange.FormulaArray = objXLApp.Transpose(varResults) > >where 'Dim objXLApp As Excel.Application ' >and 'Dim objXLRange As Excel.Range' and has been defined precisely, according to the size of the incoming data in the temp table, >and varResults is a 2-dimension array being the result of SELECT * FROM tmpTable. The column count is fixed at 18 but the Row count is variable. > >This works well when the temp table has 303 rows or less. Over 303 rows, and I get 'Error 13 Type Mismatch'. I have looked for corrupted data coming in thru the query that creates the temp table, but after many hours of experimentation it comes back to an apparent limit on the number of Rows. > >I don't remember where I got the code from and I don't pretend to understand the 'FormulaArray' property in Excel, but someone here might have been down this track .... any takers? > > >Stephen Bond > > > >------------------------------------------------------------------------ > >No virus found in this incoming message. >Checked by AVG Anti-Virus. >Version: 7.0.344 / Virus Database: 267.10.17/84 - Release Date: 29/08/2005 > > -- Marty Connelly Victoria, B.C. Canada