Hale, Jim
Jim.Hale at FleetPride.com
Thu Dec 14 10:19:11 CST 2006
Here is a method from a Excel class I wrote. This assumes an instance of Excel exists (AppXcel) and uses two functions (SheetExists and RangeNameExists)which I can send if you don't have them. If a range name is supplied it will paste to the range. If no range is supplied it will clear the sheet and paste starting in cell A2 (I usually have labels in row 1). If blPaste is true it doesn't clear the worksheet but pastes the recortset at the bottom of the previous paste. This allows multiple queries to be pasted one after the other to the same sheet. HTH Jim Hale Public Function PasteRecSetExcel(strSheetName As String, _ rstData As Recordset, Optional blPaste As Boolean = False, Optional strWSRange As String) As Boolean Dim wksUpl As Worksheet, y As Long, lngRetval As Long, blSheet As Boolean, blRange As Boolean On Error GoTo PROC_ERR blSheet = SheetExists(strSheetName) blRange = RangeNameExists(strWSRange) If strWSRange = "" Then blRange = True If rstData.RecordCount = 0 Then MsgBox rstData.Name & " is empty. There are no records to paste ", _ vbOKOnly + vbCritical + vbSystemModal + vbDefaultButton1, _ "Empty Recordset" PasteRecSetExcel = False ElseIf blSheet = False Then MsgBox strSheetName & " doesn't exist.", _ vbOKOnly + vbCritical + vbSystemModal + vbDefaultButton1, _ "Non-existent Sheet" PasteRecSetExcel = False ElseIf blRange = False Then MsgBox strWSRange & " is not a valid range name. No data was pasted.", _ vbOKOnly + vbCritical + vbSystemModal + vbDefaultButton1, _ "Range does not exist" PasteRecSetExcel = False Else 'Load Data into Excel Set wksUpl = appXcel.Worksheets(strSheetName) If strWSRange = "" Then 'if range name exists use different paste method If blPaste = True Then 'true means find first empty cell before pasting the recordset y = appXcel.WorksheetFunction.CountA(wksUpl.Range("A:A")) wksUpl.Cells(y + 1, 1).CopyFromRecordset rstData Else 'false means clear th sheet and paste the new data beginning in A2 wksUpl.Range("A2:IV65536").ClearContents wksUpl.Range("A2").CopyFromRecordset rstData End If Else wksUpl.Range(strWSRange).ClearContents wksUpl.Range(strWSRange).CopyFromRecordset rstData End If PasteRecSetExcel = True End If PROC_EXIT: If (rstData Is Nothing) = False Then Set rstData = Nothing If (wksUpl Is Nothing) = False Then Set wksUpl = Nothing Exit Function PROC_ERR: PasteRecSetExcel = False If Err.Number = 1004 Then MsgBox "UseExcel.Class Error: Range " & strWSRange & " does not exist.", , _ "PasteRecSetExcel Method" Else MsgBox "UseExcel.Class Error: " & Err.Number & ". " & Err.Description, , _ "PasteRecSetExcel Method" End If Resume PROC_EXIT End Function -----Original Message----- From: Reuben Cummings [mailto:reuben at gfconsultants.com] Sent: Thursday, December 14, 2006 9:44 AM To: AccessD Subject: [AccessD] Export data from query to Excel I can't get anything from the archives right now... Anyone got a nice routine for exporting data from a query to an excel spreadsheet? I have a query that I will change the criteria in to get the specific results I need. I then want to run a routine to export that data to a new worksheet. The query structure will always be the same - just different data. So all I need is a way to export the data while allowing me to create the worksheet name at the time of the export. I have to do this about 150 times so automation would be nice. Thanks. Reuben Cummings GFC, LLC 812.523.1017 *********************************************************************** The information transmitted is intended solely for the individual or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of or taking action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you have received this email in error please contact the sender and delete the material from any computer. As a recipient of this email, you are responsible for screening its contents and the contents of any attachments for the presence of viruses. No liability is accepted for any damages caused by any virus transmitted by this email.